|
|
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)
|
|
|
|