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.

130 lines
5.7 KiB

from datetime import date
from telebot.types import CallbackQuery, Message
from bot import Bot
from community import Community
def views(bot: Bot):
@bot.handle_commands(['/start'])
def handle_start(msg: Message, 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.save_community(community)
bot.reply_with_template(msg, 'info', start=True)
@bot.handle_commands(['/help', ' About', ' О боте'])
def handle_help(msg, _user, _args):
bot.reply_with_template(msg, 'info', start=False)
@bot.handle_commands(['/request', '📝 Request a meeting', '📝 Запросить встречу'])
def request_meeting(msg: Message, user, _args):
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: Message, user, args):
# 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(query: CallbackQuery, 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(query, 'request_meeting_success', community=community)
else:
bot.reply_with_template(query, 'request_meeting_failure', community=community)
bot.answer_callback_query(query.id)
@bot.handle_callback('dismiss')
def dismiss_callback(query: CallbackQuery, user, _args):
bot.answer_callback_query(query.id, {'en': 'Ok, fine', 'ru': 'ладно'}.get(user.locale, 'Ok'))
bot.delete_message(query.message.chat.id, query.message.message_id)
@bot.handle_callback('community_add')
def community_add_callback(query: CallbackQuery, user, args):
community = Community.by_id(int(args), bot)
if user.user_id in community.members:
bot.reply_with_template(query, 'community_added', community=community, already_member=True)
elif community.add_member(user.user_id, bot):
bot.reply_with_template(query, 'community_added', community=community, already_member=False)
bot.poll_user_for_community(user, community)
bot.answer_callback_query(query.id)
bot.save_community(community)
@bot.handle_commands(['/send_all'])
def send_spam(msg, user, _args):
if not user.is_admin():
return
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)