Random Coffee alternative - random meetings for Telegram chats https://t.me/ranteabot
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
4.7 KiB

from datetime import date
2 years ago
from bot import Bot
from community import Community
2 years ago
def views(bot: Bot):
@bot.handle_commands(['/start'])
def handle_start(msg, user, args):
if msg.chat.type in 'supergroup':
bot.reply_with_template(msg, 'welcome', community=Community.by_id(msg.chat.id, bot))
return
if args.strip().startswith('comm'):
community_id = int('-'.join(args.strip().split('-')[1:]))
community = Community.by_id(community_id, bot)
if user.user_id in community.members:
bot.reply_with_template(msg, 'community_added', community=community, already_member=True)
elif community.add_member(user.user_id, bot):
bot.reply_with_template(msg, 'community_added', community=community, already_member=False)
bot.poll_user_for_community(user, community)
else:
bot.reply_with_template(msg, 'err_not_a_member', community=community)
bot.reply_with_template(msg, 'info', start=True)
2 years ago
@bot.handle_commands(['/help', ' About', ' О боте'])
def handle_help(msg, _user, _args):
bot.reply_with_template(msg, 'info', start=False)
2 years ago
@bot.handle_commands(['/request', '📝 Request a meeting', '📝 Запросить встречу'])
def request_meeting(msg, user, _args):
2 years ago
if msg.chat.type != 'private':
bot.reply_with_template(msg, 'err_not_private')
return
comm_ids_and_names = [(community.chat_id, community.name) for community in user.get_communities(bot)]
bot.reply_with_template(msg, 'request_meeting', comm_list=comm_ids_and_names)
@bot.handle_commands(['/join'])
def join_community(msg, user, args):
2 years ago
# check if it really is a community
if msg.chat.type == 'private':
bot.reply_with_template(msg, 'err_not_community')
return
# send community link
community = Community.by_id(msg.chat.id, bot)
bot.reply_with_template(msg, 'welcome', community=community, join=True)
@bot.handle_callback('request_meeting')
def request_meeting_callback(msg, user, args):
community = Community.by_id(int(args), bot)
if community.can_user_request_a_meeting(user.user_id):
community.polled[user.user_id] = date.today()
community.pool.append(user.user_id)
bot.reply_with_template(msg, 'request_meeting_success', community=community)
else:
bot.reply_with_template(msg, 'request_meeting_failure', community=community)
bot.answer_callback_query(msg.id)
2 years ago
@bot.handle_commands(['/send_all'])
def send_spam(msg, user, _args):
if not user.is_admin():
return
2 years ago
def handler(msg_1):
bot.send_all_copy(msg_1)
bot.send_message(msg.chat.id, 'Send the message')
bot.register_next_step_handler(msg, handler)
@bot.handle_commands(['/all_stats'])
def all_stats(msg, user, _args):
if not user.is_admin():
return
stats = bot.stats()
bot.reply_with_template(msg, 'admin_stats', stats=stats)
@bot.handle_commands(['🛑 Cancel', '🛑 Отменить'])
def cancel_creation(msg, _user, _args):
bot.clear_step_handler_by_chat_id(msg.chat.id)
bot.reply_with_template(msg, 'canceled')
@bot.my_chat_member_handler()
def handle_my_chat_member(upd):
chat_id: int = upd.chat.id
# get the community and add it if it doesn't exist
community: Community = Community.by_id(chat_id, bot)
# send welcome message to the chat (if we can) - and if we should
bot.reply_with_template(upd, 'welcome', community=community)
@bot.handle_callback('meetings')
def handle_meetings_answer(query, user, args):
community_id, answer = args.split('_')
answer = int(answer)
community = Community.by_id(int(community_id), bot)
community.add_answer(user.user_id, int(answer), bot)
# edit the keyboard
bot.edit_message_with_template(query, 'poll_user', community=community, answer=answer)
@bot.handle_commands(['/send_polls'])
def send_polls(msg, _user, _args):
community: Community = Community.by_id(msg.chat.id, bot)
bot.poll_users_in_community(community)
@bot.handle_commands(['/send_meetings'])
def send_meetings(msg, _user, _args):
community: Community = Community.by_id(msg.chat.id, bot)
bot.send_meeting_info_in_community(community)
@bot.handle_commands(['/schedule_meetings'])
def schedule_meetings(msg, _user, _args):
community: Community = Community.by_id(msg.chat.id, bot)
community.schedule_meetings()
bot.save_community(community)