Skip to content

Commit 844f97f

Browse files
author
wimo7083
committed
add tech terms tech matching
1 parent 25793d1 commit 844f97f

4 files changed

Lines changed: 49 additions & 51 deletions

File tree

pybot/__main__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ def make_sentry_logger():
5050
endpoints.slack.create_endpoints(slack)
5151
bot.load_plugin(slack)
5252

53-
airtable = AirtablePlugin()
54-
endpoints.airtable.create_endpoints(airtable)
55-
bot.load_plugin(airtable)
53+
#airtable = AirtablePlugin()
54+
#endpoints.airtable.create_endpoints(airtable)
55+
#bot.load_plugin(airtable)
5656

5757
# Add route to respond to AWS health check
5858
bot.router.add_get("/health", lambda request: Response(status=200))

pybot/endpoints/slack/commands.py

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@
55
from slack import methods
66
from slack.commands import Command
77

8-
from pybot.endpoints.slack.utils import PYBACK_HOST, PYBACK_PORT, PYBACK_TOKEN, REPORT_CHANNEL, YELP_TOKEN
8+
from pybot.endpoints.slack.utils import PYBACK_HOST, PYBACK_PORT, PYBACK_TOKEN, REPORT_CHANNEL
99
from pybot.endpoints.slack.utils.action_messages import not_claimed_attachment
1010
from pybot.endpoints.slack.utils.command_utils import get_slash_here_messages, get_slash_repeat_messages, response_type
1111
from pybot.endpoints.slack.utils.slash_lunch import LunchCommand
12-
from pybot.endpoints.slack.utils.slash_tech import TechTerms
1312

1413
logger = logging.getLogger(__name__)
1514

@@ -24,7 +23,6 @@ def create_endpoints(plugin: SlackPlugin):
2423
plugin.on_command('/here', slash_here, wait=False)
2524
plugin.on_command('/lunch', slash_lunch, wait=False)
2625
plugin.on_command('/repeat', slash_repeat, wait=False)
27-
plugin.on_command('/tech', slash_tech, wait=False)
2826
plugin.on_command('/report', slash_report, wait=False)
2927

3028

@@ -109,20 +107,4 @@ async def slash_repeat(command: Command, app: SirBot):
109107
await slack.query(method_type, message)
110108

111109

112-
async def slash_tech(command: Command, app: SirBot):
113-
logger.info(f'tech command data incoming {command}')
114-
channel_id = command['channel_id']
115-
slack_id = command['user_id']
116-
slack = app["plugins"]["slack"].api
117110

118-
tech_terms: dict = TechTerms(command['channel_id'], command['user_id'],
119-
command.get('text'), command['user_name'], app).grab_values()
120-
method_type = response_type(tech_terms['type'])
121-
text = tech_terms['message']
122-
message = {
123-
'text': text,
124-
'channel': channel_id,
125-
'user': slack_id
126-
}
127-
128-
await slack.query(method_type, message)

pybot/endpoints/slack/event_messages/tech.py

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,15 @@ async def _update_terms(self) -> Dict[str, list]:
2525
two_col_org_row: Pattern[str] = self._compile_regex_from_parts()
2626

2727
content = await self._grab_data_from_github()
28-
2928
lines: List[str] = content.splitlines()
3029

31-
return {x['term'].lower(): 'f{x["term"]} is x["definition"]}' for x in
30+
return {x['term'].lower(): f'{x["term"]} is {x["definition"]}' for x in
3231
self._filter_matches(lines, two_col_org_row)}
3332

3433
async def _grab_data_from_github(self) -> str:
3534
async with self.app.http_session.get(self.TERM_URL) as r:
3635
r.raise_for_status()
37-
data = await r.json()
38-
return data.decode('utf-8')
36+
return await r.text(encoding='utf-8')
3937

4038
def _compile_regex_from_parts(self) -> Pattern[str]:
4139
n_spaces_pipe_n_spaces = '\\s*\\|\\s*'
@@ -55,35 +53,36 @@ def _filter_matches(self, lines: List[str], two_col_org_row: Pattern[str]) -> Ge
5553
class TechTerms:
5654
# shared across all instances
5755
TERMS = {}
58-
ADD_GITHUB_CHANCE = .25
56+
ADD_GITHUB_CHANCE = 1
5957

60-
def __init__(self, channel: str, user: str, input_text: str, user_name: str, app):
58+
def __init__(self, channel: str, user: str, input_text: str, app):
6159

6260
self.channel_id = channel
6361
self.user_id = user
64-
self.input_text = input_text
65-
self.user_name = user_name
62+
self.input_text = self.remove_tech(input_text)
6663
self.app = app
64+
self.response_params = None
65+
66+
def remove_tech(self, initial_input):
67+
return initial_input.split('!tech', 1)[1]
6768

68-
self.response_params = self._parse_input()
69+
async def grab_values(self) -> dict:
6970

70-
def grab_values(self) -> dict:
7171
if not self.input_text:
72-
return {'type': 'ephemeral', 'message': self._help_text()}
72+
return {'message': self._help_text()}
7373

7474
else:
75+
if not self.response_params:
76+
await self._parse_input()
7577

76-
split_items: List[str] = self.input_text.split()
77-
if split_items[0] == 'loud':
78-
return {'type': 'loud', 'message': self._grab_term(split_items)}
79-
80-
if split_items[0] == 'loud':
81-
return {'type': 'loud', 'message': self._grab_term(split_items)}
78+
if self.input_text:
79+
return {'message': self._grab_term(term=self.input_text)}
8280

83-
return {'type': 'ephemeral', 'message': self._grab_term(), }
81+
return {'message': self._grab_term(), }
8482

8583
async def _parse_input(self) -> None:
86-
self.TERMS = await TechTermsGrabber(self.app).get_terms()
84+
grabber = TechTermsGrabber(self.app)
85+
self.TERMS = await grabber.get_terms()
8786

8887
def _help_text(self):
8988
return ('Use this to find descriptions of common and useful tech terms. Examples:\n' +
@@ -92,27 +91,28 @@ def _help_text(self):
9291
self._source_text())
9392

9493
def _source_text(self):
95-
return '\nFor the source data please see <github|https://github.com/togakangaroo/tech-terms>'
94+
return '\nTech Terms source: <https://github.com/togakangaroo/tech-terms|github>'
9695

97-
def _convert_key_to_dict(self, key: str) -> dict:
98-
return {'term': key, 'definition': self.TERMS[key]}
96+
def _convert_key_to_dict(self, key: str, random_val: bool = False) -> dict:
97+
return {'term': key, 'random': random_val, 'definition': f'{self.TERMS[key]}'}
9998

10099
def _grab_term(self, term=None):
101-
if isinstance(term, list) and len(term) > 1 and self.TERMS.get(term[1].lower()):
102-
term_key: str = self.TERMS.get(term[1])
100+
if term and self.TERMS.get(term.lower().strip()):
101+
term_key: str = term.lower().strip()
103102
return self._build_response_text(self._convert_key_to_dict(term_key))
104103

105104
return self._build_response_text(self._random_term())
106105

107106
def _build_response_text(self, term: dict) -> dict:
108-
return {'user': self.user_id, 'channel': self.channel_id,
107+
return {'channel': self.channel_id,
109108
'text': self._serialize_term(term)}
110109

111110
def _random_term(self) -> dict:
112-
item = choice(self.TERMS.keys())
113-
return self._convert_key_to_dict(item)
111+
item = choice(list(self.TERMS.keys()))
112+
return self._convert_key_to_dict(item, random_val=True)
114113

115114
def _serialize_term(self, term: Dict[str, str]) -> str:
116-
addnl = self._source_text() if random.random() < self.ADD_GITHUB_CHANCE else ''
115+
random_text = "Selected random term:\n"
116+
addnl = self._source_text() if random() < self.ADD_GITHUB_CHANCE else ''
117117

118-
return f'{term["definition"]}{addnl}'
118+
return f'{random_text if term["random"] else ""} {term["definition"]}{addnl}'

pybot/endpoints/slack/messages.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@
22

33
from sirbot import SirBot
44
from slack.events import Message
5+
from slack import methods
6+
7+
from pybot.endpoints.slack.event_messages.tech import TechTerms
58

69
logger = logging.getLogger(__name__)
710

811

912
def create_endpoints(plugin):
1013
plugin.on_message(".*", message_changed, subtype="message_changed")
1114
plugin.on_message(".*", message_deleted, subtype="message_deleted")
15+
plugin.on_message(".*\!tech", tech_tips)
1216

1317

1418
def not_bot_message(event: Message):
@@ -19,6 +23,18 @@ def not_bot_delete(event: Message):
1923
return 'previous_message' not in event or 'bot_id' not in event['previous_message']
2024

2125

26+
async def tech_tips(event: Message, app: SirBot):
27+
logger.info(
28+
f'tech logging: {event}')
29+
try:
30+
tech_terms: dict = await TechTerms(event['channel'], event['user'],
31+
event.get('text'), app).grab_values()
32+
33+
await app.plugins["slack"].api.query(methods.CHAT_POST_MESSAGE, tech_terms['message'])
34+
except Exception as E:
35+
logger.exception(E)
36+
37+
2238
async def message_changed(event: Message, app: SirBot):
2339
"""
2440
Logs all message edits not made by a bot.

0 commit comments

Comments
 (0)