Browse Source

Running necessary actions for community

master
Lev 2 years ago
parent
commit
56998f905a
  1. 4
      README.md
  2. 20
      bot.py
  3. 11
      community.py

4
README.md

@ -12,6 +12,8 @@ Random meetings for chats, kind of like RandomCoffee.
4. The bot sends the matches and links to their Telegram accounts
TODO:
- Auto-scheduling: run it at every event
- Auto-scheduling: run it once a day and send meeting info
- A button to request a meeting
- Add limitations to the number of meetings
- Add commands like info
- In templates replace "this week" with "soon"

20
bot.py

@ -15,6 +15,10 @@ import traceback
import time
POLL_HOUR = 10
SCHEDULING_HOUR = 20
def locale_from_ietf(_ietf_locale: str) -> str:
# if not ietf_locale:
# return 'en'
@ -204,10 +208,20 @@ class Bot(telebot.TeleBot):
person_1, person_2 = self.get_chat(meeting[0]), self.get_chat(meeting[1])
self.send_template(meeting[0], 'meeting_info', community=community, meeting=meeting, person=person_2)
self.send_template(meeting[1], 'meeting_info', community=community, meeting=meeting, person=person_1)
community.archived_meetings += community.scheduled_meetings
community.scheduled_meetings = []
self.save_community(community)
def community_post_edit_routine(self, community: Community):
community.schedule_meetings()
self.send_meeting_info_in_community(community)
def run_necessary_actions_for_community(self, community: Community):
if community.task_last_timestamps.get('poll', datetime.date.today() - datetime.timedelta(days=1)) \
< datetime.date.today() and datetime.datetime.now().hour >= POLL_HOUR:
self.poll_users_in_community(community)
community.task_last_timestamps['poll'] = datetime.date.today()
if community.task_last_timestamps.get('scheduling', datetime.date.today() - datetime.timedelta(days=1)) \
< datetime.date.today() and datetime.datetime.now().hour >= SCHEDULING_HOUR:
community.schedule_meetings()
self.send_meeting_info_in_community(community)
community.task_last_timestamps['scheduling'] = datetime.date.today()
self.save_community(community)
def register_next_step_handler(self, message, callback, *args, **kwargs):

11
community.py

@ -23,11 +23,12 @@ class Community:
name: str = ''
members: typing.List[int] = field(default_factory=list)
pool: typing.List[int] = field(default_factory=list) # [user_id]
polled: typing.Dict[int, date] = field(default_factory=dict) # Days since the user was asked
polled: typing.Dict[int, date] = field(default_factory=dict) # Days since the user was asked
scheduled_meetings: typing.List[typing.Tuple[int, int, date]] = field(
default_factory=list) # (user_id_1, user_id_2, meeting date)
archived_meetings: typing.List[typing.Tuple[int, int, date]] = field(default_factory=list)
default_answers: typing.Dict[int, bool] = field(default_factory=dict) # Last answers
default_answers: typing.Dict[int, bool] = field(default_factory=dict) # Last answers
task_last_timestamps: typing.Dict[str, date] = field(default_factory=dict) # {'poll': ..., 'scheduling': ...}
start_timestamp: int = field(default_factory=lambda: int(time.time()))
def dict(self) -> dict:
@ -36,6 +37,8 @@ class Community:
data['default_answers'] = {str(k): self.default_answers[k] for k in self.default_answers}
data['scheduled_meetings'] = [(l, m, r.toordinal()) for l, m, r in self.scheduled_meetings]
data['archived_meetings'] = [(l, m, r.toordinal()) for l, m, r in self.archived_meetings]
data['task_last_timestamps'] = {str(k): self.task_last_timestamps[k].toordinal() for k in
self.task_last_timestamps}
return data
@classmethod
@ -47,6 +50,8 @@ class Community:
self = cls(**data_)
self.polled = {int(k): convert_to_date(self.polled[k]) for k in self.polled}
self.default_answers = {int(k): self.default_answers[k] for k in self.default_answers}
self.task_last_timestamps = {k: convert_to_date(self.task_last_timestamps[k]) for k in
self.task_last_timestamps}
self.scheduled_meetings = [(int(l), int(m), convert_to_date(r)) for l, m, r in self.scheduled_meetings]
self.archived_meetings = [(int(l), int(m), convert_to_date(r)) for l, m, r in self.archived_meetings]
return self
@ -98,7 +103,7 @@ class Community:
for l, m, r in self.scheduled_meetings)
def schedule_meetings(self):
random.shuffle(self.pool) # It's called RandomTea for a reason
random.shuffle(self.pool) # It's called RandomTea for a reason
today = date.today()
while len(self.pool) > 1:
user_id_1 = self.pool.pop()

Loading…
Cancel
Save