Skip to content

Commit 021ddb1

Browse files
authored
Merge branch 'main' into tkp/docsfix
2 parents 832a5ed + eb888e1 commit 021ddb1

20 files changed

Lines changed: 200 additions & 41 deletions

csp_bot/__init__.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
__version__ = "1.0.0"
22

33

4-
# reexport
5-
from csp_adapter_discord import DiscordAdapterConfig
6-
from csp_adapter_slack import SlackAdapterConfig
7-
from csp_adapter_symphony import SymphonyAdapterConfig
8-
4+
from .backends import *
95
from .bot import Bot
106
from .bot_config import *
117
from .commands import *

csp_bot/backends/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .discord import *
2+
from .slack import *
3+
from .symphony import *

csp_bot/backends/discord.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from csp import Struct
2+
from pydantic import BaseModel
3+
4+
__all__ = (
5+
"DiscordAdapterConfig",
6+
"DiscordAdapterManager",
7+
"DiscordMessage",
8+
"mention_user_discord",
9+
)
10+
11+
try:
12+
from csp_adapter_discord import DiscordAdapterConfig, DiscordAdapterManager, DiscordMessage, mention_user as mention_user_discord
13+
except ImportError:
14+
15+
class DiscordAdapterConfig(BaseModel):
16+
pass
17+
18+
DiscordAdapterManager = None
19+
20+
class DiscordMessage(Struct):
21+
_ignore: str = ""
22+
23+
mention_user_discord = lambda x: x # noqa: E731

csp_bot/backends/slack.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from csp import Struct
2+
from pydantic import BaseModel
3+
4+
__all__ = (
5+
"SlackAdapterConfig",
6+
"SlackAdapterManager",
7+
"SlackMessage",
8+
"mention_user_slack",
9+
)
10+
11+
# reexport
12+
try:
13+
from csp_adapter_slack import SlackAdapterConfig, SlackAdapterManager, SlackMessage, mention_user as mention_user_slack
14+
except ImportError:
15+
16+
class SlackAdapterConfig(BaseModel):
17+
pass
18+
19+
SlackAdapterManager = None
20+
21+
class SlackMessage(Struct):
22+
_ignore: str = ""
23+
24+
mention_user_slack = lambda x: x # noqa: E731

csp_bot/backends/symphony.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from csp import Struct
2+
from pydantic import BaseModel
3+
4+
__all__ = (
5+
"SymphonyAdapterConfig",
6+
"SymphonyAdapter",
7+
"SymphonyMessage",
8+
"Presence",
9+
"mention_user_symphony",
10+
)
11+
12+
# reexport
13+
try:
14+
from csp_adapter_symphony import SymphonyAdapter, SymphonyAdapterConfig, SymphonyMessage, mention_user as mention_user_symphony
15+
from csp_adapter_symphony.adapter import Presence
16+
except ImportError:
17+
18+
class SymphonyAdapterConfig(BaseModel):
19+
pass
20+
21+
SymphonyAdapter = None
22+
Presence = None
23+
24+
class SymphonyMessage(Struct):
25+
_ignore: str = ""
26+
27+
mention_user_symphony = lambda x: x # noqa: E731

csp_bot/bot.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,35 @@
1-
import logging
21
import re
32
import threading
43
import time
54
from csv import reader
65
from datetime import datetime, timedelta
76
from io import StringIO
7+
from logging import getLogger
88
from types import MappingProxyType
99
from typing import Any, Dict, List, Optional, Set, Tuple, Union
1010

1111
import csp
1212
from bs4 import BeautifulSoup, Tag
1313
from croniter import croniter
1414
from csp import Outputs, ts
15-
from csp_adapter_discord import DiscordAdapterManager, DiscordMessage as RawDiscordMessage
16-
from csp_adapter_slack import SlackAdapterManager, SlackMessage as RawSlackMessage
17-
from csp_adapter_symphony import SymphonyAdapter, SymphonyMessage as RawSymphonyMessage
18-
from csp_adapter_symphony.adapter import Presence
1915
from pydantic import PrivateAttr
2016

17+
from .backends import (
18+
DiscordAdapterManager,
19+
DiscordMessage as RawDiscordMessage,
20+
Presence,
21+
SlackAdapterManager,
22+
SlackMessage as RawSlackMessage,
23+
SymphonyAdapter,
24+
SymphonyMessage as RawSymphonyMessage,
25+
)
2126
from .bot_config import BotConfig
2227
from .commands import (
2328
BaseCommand,
2429
BaseCommandModel,
2530
HelpCommand,
2631
ScheduleCommand,
32+
StatusCommand,
2733
)
2834
from .gateway import GatewayChannels, GatewayModule
2935
from .structs import (
@@ -34,7 +40,7 @@
3440
)
3541
from .utils import Backend
3642

37-
log = logging.getLogger(__name__)
43+
log = getLogger(__name__)
3844

3945
SLACK_ENTITY_REGEX = re.compile("<@.+?>")
4046
DISCORD_ENTITY_REGEX = re.compile("<@.+?>")
@@ -59,12 +65,18 @@ class Bot(GatewayModule):
5965

6066
def connect(self, channels: GatewayChannels) -> None:
6167
if self.config.discord_config:
68+
if DiscordAdapterManager is None:
69+
raise ImportError("Discord adapter not installed. Please install csp-adapter-discord.")
6270
self._configs["discord"] = self.config.discord_config
6371
self._adapters["discord"] = DiscordAdapterManager(self.config.discord_config.adapter_config)
6472
if self.config.slack_config:
73+
if SlackAdapterManager is None:
74+
raise ImportError("Slack adapter not installed. Please install csp-adapter-slack.")
6575
self._configs["slack"] = self.config.slack_config
6676
self._adapters["slack"] = SlackAdapterManager(self.config.slack_config.adapter_config)
6777
if self.config.symphony_config:
78+
if SymphonyAdapter is None:
79+
raise ImportError("Symphony adapter not installed. Please install csp-adapter-symphony.")
6880
self._configs["symphony"] = self.config.symphony_config
6981
self._adapters["symphony"] = SymphonyAdapter(self.config.symphony_config.adapter_config)
7082

@@ -198,10 +210,10 @@ def message_to_bot_commands(self, message: ts[Message]) -> Outputs(bot_commands=
198210
log.info("Ignoring message (not to bot)")
199211
else:
200212
if not self.is_authorized(message):
201-
if self._config[message.backend].unauthorized_msg:
213+
if self._configs[message.backend].unauthorized_msg:
202214
channel = message.channel if message.channel != "IM" else message.user
203215
unauthorized_message = Message(
204-
msg=self._config[message.backend].unauthorized_msg, channel=channel, source=message.backend
216+
msg=self._configs[message.backend].unauthorized_msg, channel=channel, source=message.backend
205217
)
206218
csp.output(unauthorized_message=unauthorized_message)
207219
else:
@@ -458,10 +470,14 @@ def extract_bot_commands(self, message: Message, channel: str, text: str, entiti
458470

459471
command_runner = self._commands[command]
460472

473+
# TODO generalize by interrogating the command signature
461474
if isinstance(command_runner, ScheduleCommand):
462475
# Special command, gets access to schedule of commands
463476
return command_runner.preexecute(command_instance, self._scheduled, self)
464-
return self._commands[command].preexecute(command_instance)
477+
elif isinstance(command_runner, StatusCommand):
478+
# Special command, gets access to status of commands
479+
return command_runner.preexecute(command_instance, self)
480+
return command_runner.preexecute(command_instance)
465481
else:
466482
log.info(f"Defaulting to help command from message to bot with no command: {message}")
467483
command_runner = self._commands["help"]

csp_bot/bot_config.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
from typing import List, Optional, Union
22

33
from ccflow import BaseModel
4-
from csp_adapter_discord import DiscordAdapterConfig
5-
from csp_adapter_slack import SlackAdapterConfig
6-
from csp_adapter_symphony import SymphonyAdapterConfig
74
from pydantic import Field
85

6+
from .backends import DiscordAdapterConfig, SlackAdapterConfig, SymphonyAdapterConfig
7+
98
__all__ = (
109
"BaseConfig",
1110
"BotConfig",

csp_bot/cli.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import logging
1+
from logging import getLogger
22
from pprint import pprint
33

44
import csp_gateway
@@ -8,7 +8,7 @@
88

99
from csp_bot import __version__
1010

11-
log = logging.getLogger(__name__)
11+
log = getLogger(__name__)
1212

1313
__all__ = (
1414
"load",

csp_bot/commands/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@
1111
from .echo import EchoCommand, EchoCommandModel
1212
from .help import HelpCommand, HelpCommandModel
1313
from .schedule import ScheduleCommand, ScheduleCommandModel
14+
from .status import StatusCommand, StatusCommandModel

csp_bot/commands/echo.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import logging
1+
from logging import getLogger
22
from typing import Optional, Type
33

44
from csp_bot.structs import BotCommand, Message
55

66
from .base import BaseCommand, BaseCommandModel, ReplyToOtherCommand
77

8-
log = logging.getLogger(__name__)
8+
log = getLogger(__name__)
99

1010

1111
class EchoCommand(ReplyToOtherCommand):

0 commit comments

Comments
 (0)