def role_list(update, context): user = update.message.from_user chat = update.message.chat msg = "لیست نقش های ثبت شده \n\n" # saved role list saved_roles = roles[chat.id] allowed_players = allow_users[chat.id] # get leader leader_id = leader[chat.id] if leader_id in allowed_players: user_obj = bot.get_chat_member(chat_id=chat.id, user_id=int(leader_id)) msg += "شکارچی : {}\n".format(mention(leader_id, user_obj.user.first_name)) # list alive roles for player in saved_roles: # check player is not alive if player not in allowed_players: continue # check player is leader if player == leader_id: continue player_obj = bot.get_chat_member(chat_id=chat.id, user_id=int(player)) name = player_obj.user.full_name msg += f'{mention(player, name)} : {saved_roles[player]}\n' # if anyone have not save role if not saved_roles: msg = "هیشکی نقششو ثبت نکرده 😐 \n با /saveYourRole ازشون بخواه ک نقششونو ثبت بکنن" # ask role context.bot.send_message(chat.id, msg, parse_mode='HTML')
def buttons(update, context): query = update.callback_query chat_id = query.message.chat.id user = query.from_user data = query.data.replace('stats ', '', 1).split(' ') if data[0] == 'stats': player = data[1] text = get_player_stats_text(player) if not text: text = 'کاربر سابقه ای ندارد' query.answer(text=text, show_alert=True) return elif data[0] == 'kills': player = data[1] text = get_player_kills_text(player) query.answer(text=text, show_alert=True) return elif data[0] == 'killedBy': player = data[1] text = get_player_killed_by_text(player) query.answer(text=text, show_alert=True) return elif data[0] == 'death': player = data[1] text = get_player_death_text(player) query.answer(text=text, show_alert=True) return elif data[0] == 'ban': player = data[1] if bot.get_chat_member(chat_id, user.id).status in ['creator', 'administrator']: t = bot.get_chat_member(chat_id=chat_id, user_id=int(player)) name = t.user.full_name bot.kick_chat_member(chat_id, player) query.edit_message_text('{} Banned {}'.format( mention(user.id, user.first_name), mention(int(player), name)), parse_mode='Markdown') return
def save_your_role(update, context): user = update.message.from_user chat = update.message.chat # check ask role is allow group_rules = rules[chat.id] if group_rules: if not group_rules['save_your_role']: update.message.reply_text('امکان استفاده از این دستور غیر فعال است' ) # this option is disabled return # if ask role is used before in this game day if ask_roles[chat.id] >= 1: update.message.reply_text( "شما تنها یک بار در هر روز میتوانید درخواست نقش کنید") # set ask role used one time in this group ask_roles[chat.id] += 1 allowed_users = allow_users[chat.id] saved_roles = roles[chat.id] # if no one alive if not group_rules['save_your_role']: update.message.reply_text('امکان استفاده از این دستور غیر فعال است' ) # this option is disabled return # list of users who have not saved role not_saved_role_users = [ user for user in allowed_users if user not in saved_roles ] # ask role if there are anyone have not saved role for user in not_saved_role_users: user_obj = bot.get_chat_member(chat_id=chat.id, user_id=int(user)) name = user_obj.user.full_name context.bot.send_message( chat.id, text="""{} نقشت چیه ؟""".format(mention( user, name)), # what is your role ? parse_mode='HTML') time.sleep(1) msg = f'ببین نقش این {len(not_saved_role_users)} نفر چیه' # look what is their role # check if all users have saved a role if not not_saved_role_users: msg = 'بچه های خوبی دارید همشون نقشاشونو ثبت کردن 😅' # every body saved a role update.message.reply_text(msg)
def make_user_role_list_v0(chat_id): players = get_role_list(chat_id) allow_players = get_allow_players(chat_id) shekar = get_shekarchi_db(chat_id) texts = return_lang(chat_id).List shekar_saved = False msg = get_from_db('role_list_header')[0] role_list_footer = get_from_db('role_list_footer')[0] role_list_user = get_from_db('role_list_user')[0] if shekar in allow_players: u = bot.get_chat_member(chat_id, int(shekar)) name = u.user.full_name ranks = give_rank(u.user) shekar_saved = True msg += role_list_user.format(name=f'<b>{mention(u.user.id, name)}</b>', ranks='|'.join(ranks), role=choice(texts.ch)) + '\n\n' saved_role_users = [] not_saved_role_users = [] for player in players: if player not in allow_players or player == shekar: continue t = bot.get_chat_member(chat_id=chat_id, user_id=int(player)) name = t.user.full_name role = html.escape(players[player]) ranks = give_rank(t.user) saved_role_users.append( role_list_user.format(name=name, ranks='|'.join(ranks), role=': ' + role)) for player in allow_players: if player == shekar or player in players: continue t = bot.get_chat_member(chat_id=chat_id, user_id=int(player)) name = t.user.full_name ranks = give_rank(t.user) not_saved_role_users.append( role_list_user.format(name=mention(player, name), ranks='|'.join(ranks), role='')) msg += '\n'.join(saved_role_users) + role_list_footer if not saved_role_users and not shekar_saved: msg = texts.list_empty return msg
def update_list(update, context): user = update.message.from_user chat = update.message.chat # check message is replied to game bot if not update.message.reply_to_message or update.message.reply_to_message.from_user.id not in bot_list: update.message.reply_text('به لیست بازی ربات ریپلای بزنید') # reply to game list return # check game list is not used before if update.message.reply_to_message.message_id in used_messages[chat.id]: update.message.reply_text('این لیست قبلا ثبت شده است') # list used before return message_text = update.message.reply_to_message.text # game message entities = update.message.reply_to_message['entities'] # entities list global allow_users, in_game_users, ask_roles, roles # check if this message is the last list of the game if re.search(game_finish, message_text): context.bot.send_message(chat.id, 'بازی خوبی بود') # gg roles.update({chat.id: {}}) # clean roles list allow_users.update({chat.id: {}}) # clean player list return # check if this is game middle list elif re.search(death, message_text): # list alive players (died players are not mentioned in list) alive_users = [ent['user'].id for ent in entities if ent['type'] == 'text_mention'] # update allowed users to save role allow_users[chat.id] = alive_users # reset ask role status ask_roles[chat.id] = 0 # add message id into used messages used_messages[chat.id].add(update.message.message_id) context.bot.send_message(chat.id, 'لیست اپدیت شد') # role list updated saved_roles = roles[chat.id] # roles list allow_players = allow_users[chat.id] # alive players msg = "لیست نقش های ثبت شده \n\n" # list of saved roles # get leader leader_id = leader[chat.id] if leader_id in allow_players: leader_user_obj = bot.get_chat_member(chat_id=chat.id, user_id=int(leader_id)) msg += "شکارچی : {}\n".format(mention(leader_id, leader_user_obj.user.first_name)) # if any role saved if not saved_roles: # check if leader exists if leader_id: context.bot.send_message(chat.id, msg, parse_mode='HTML') return msg = "هیشکی نقششو ثبت نکرده 😐 \n" # anyone saved role # check group rules for response group_rules = rules[chat.id] if group_rules: if group_rules['save_your_role']: msg += 'با /saveYourRole ازشون ک نقششونو بپرسید' # ask with ask role elif group_rules['save_role']: msg += 'با /sn نقش خودتونو ثبت کنید' # save with /sn else: msg = "" # if no setting modified else: msg += 'با /saveYourRole ازشون ک نقششونو بپرسید' # list alive roles for player in saved_roles: # check player is not alive if player not in allow_players: continue # check player is leader if player == leader_id: continue player_obj = bot.get_chat_member(chat_id=chat.id, user_id=int(player)) name = player_obj.user.full_name msg += f'{name} : {saved_roles[player]}\n' context.bot.send_message(chat.id, msg, parse_mode='HTML') return elif re.search(game_list, message_text): # list alive players (died players are not mentioned in list) alive_users = [ent['user'].id for ent in entities if ent['type'] == 'text_mention'] # update allowed users to save role and in game users allow_users[chat.id] = alive_users in_game_users[chat.id] = alive_users # reset ask role status ask_roles[chat.id] = 0 # add message id into used messages used_messages[chat.id].add(update.message.reply_to_message.message_id) # check group rules for response group_rules = rules[chat.id] msg = f'با {len(alive_users)} بازیکن بازی شروع شد\n' if group_rules: if group_rules['save_your_role']: msg += ' برای اینکه نقش اون هارو بخاهید از دستور /saveYourRole استفاده کنید' # ask with ask role elif group_rules['saverole']: msg += 'با /sn نقش خودتونو ثبت کنید' # save with /sn else: pass else: msg += ' برای اینکه نقش اون هارو بخاهید از دستور /saveYourRole استفاده کنید' context.bot.send_message(chat.id, msg) return else: context.bot.send_message(chat.id, 'seems its not a game list message')
def inline_handler(update, context): texts = update.user_lang user = update.effective_user info = get_player_info_no_chat(user.id) if info: my_stats_text = texts.Mystate.template_inline.format( name=mention(user.id, user.first_name), type=UserStatus(user).status, set=info['role_count'], gp_set_count=info['group_count'], ranks='|'.join(get_cached_user(user).get_all_emoji_ranks()), gp='Inline') else: my_stats_text = texts.Mystate.no_use player = user.id votes, voted = get_most_votes(player) my_votes_text = '' if votes: my_votes_text += texts.Mostvotes.voted for _, voted_player, count in votes: try: my_votes_text += ' {} <i>{}</i>\n'.format( mention(voted_player, context.bot.get_chat(voted_player).first_name), count) except: my_votes_text += ' {} <i>{}</i>\n'.format( get_username_from_id(voted_player), count) my_votes_text += '\n' else: my_votes_text += texts.Mostvotes.no_vote if voted: my_votes_text += texts.Mostvotes.votes for voter_player, _, count in voted: try: my_votes_text += ' {} <i>{}</i>\n'.format( mention(voter_player, context.bot.get_chat(voter_player).first_name), count) except: my_votes_text += ' {} <i>{}</i>\n'.format( get_username_from_id(voter_player), count) my_votes_text += '\n' else: my_votes_text += texts.Mostvotes.no_votes my_votes_text = my_votes_text.format(mention=mention( player, user.full_name), days=7, where='') days = 7 afks = get_user_afks(user.id, days) afks_text = texts.Myafk.header.format(mention_markdown(user.id, 'شما'), days) afk_count = 0 for gap, afk in afks.items(): afks_text += f'\n{gap} - {afk}' afk_count += afk if afk_count > 5: afks_text += '\n\nDon\'t ruin the games...' else: afks_text = texts.Myafk.no_afk.format(days) res = [ InlineQueryResultArticle(id='mystate', title='آمار من', description='به نظر میرسه ازم استفاده نکردی!' if not info else None, input_message_content=InputTextMessageContent( my_stats_text, parse_mode='html', disable_web_page_preview=True)), InlineQueryResultArticle(id='myvotes', title='رای های من', description='هیچ رای ای یافت نشد!' if not votes and not voted else None, input_message_content=InputTextMessageContent( my_votes_text, parse_mode='html', disable_web_page_preview=True)), InlineQueryResultArticle(id='myafks', title='افک های من', description=afks_text[:40] + ('...' if afks else ''), input_message_content=InputTextMessageContent( afks_text, parse_mode='markdown', disable_web_page_preview=True)) ] update.inline_query.answer(res, is_personal=True, cache_time=100)
def make_user_role_list_v1(chat_id): from .v3_4 import roles_v2 all_saved = [] all_death = [] all_unsaved = [] delimiter = '\n\n〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️\n' texts = return_lang(chat_id).List saved_roles = get_role_list(chat_id) all_players = get_all_players(chat_id) alive_players = get_allow_players(chat_id) shekar = get_shekarchi_db(chat_id) role_list_user_rank_less = get_from_db('role_list_user_rank_less')[0] role_list_footer = get_from_db('role_list_footer')[0] role_list_user = get_from_db('role_list_user')[0] for user in all_players: if user not in list(saved_roles.keys()) and user in alive_players: if user == shekar: continue u = bot.get_chat_member(chat_id, user) name = u.user.full_name ranks = give_rank(u.user) all_unsaved.append( role_list_user.format(name=mention(u.user.id, name), ranks='|'.join(ranks), role='')) if shekar in alive_players: u = bot.get_chat_member(chat_id, shekar) name = u.user.full_name ranks = give_rank(u.user) all_saved.append( role_list_user.format(name=f'<b>{mention(u.user.id, name)}</b>', ranks='|'.join(ranks), role=choice(texts.ch))) for key, value in saved_roles.items(): if key == shekar or key not in alive_players: continue user = bot.get_chat_member(chat_id, key) name = user.user.full_name ranks = give_rank(user.user) all_saved.append( role_list_user.format(name=f'<b>{html.escape(name)}</b>', ranks='|'.join(ranks), role=': ' + value)) f'<b>{html.escape(name)}</b> : {html.escape(value)}' for key, value in roles_v2[chat_id].items(): if value['role']: all_death.append( role_list_user_rank_less.format( name=f'<s>{html.escape(key)}</s>', role=': ' + value['role'])) args = [] args.append((texts.dead_list if isinstance(texts.dead_list, str) else choice(texts.dead_list)) + '\n'.join(all_death)) if all_death else None args.append((texts.no_role if isinstance(texts.no_role, str ) else choice(texts.no_role)) + '\n'.join(all_unsaved)) if all_unsaved else None args.append((texts.role_list if isinstance(texts.role_list, str) else choice(texts.role_list)) + '\n'.join(all_saved)) if all_saved else None msg = delimiter.join(args) + role_list_footer return msg