Ошибка при использовании telegram-бота для python
import random
from telegram import Update, BotCommand
from telegram.ext import Updater, CommandHandler, CallbackContext, MessageHandler, Filters
from pypokerengine.api.game import setup_config, start_poker
from pypokerengine.players import BasePokerPlayer
from pypokerengine.utils.card_utils import gen_cards, estimate_hole_card_win_rate
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
TOKEN = "TOKEN"
SUIT_UNICODE = {
"S": "♠️",
"H": "♥️",
"D": "♦️",
"C": "♣️"
}
class PokerPlayer(BasePokerPlayer):
def __init__(self, uuid):
self.uuid = uuid
self.hole_card = None
def declare_action(self, valid_actions, hole_card, round_state):
return valid_actions[0]['action'], valid_actions[0]['amount']
def receive_game_start_message(self, game_info):
pass
def receive_round_start_message(self, round_count, hole_card, seats):
self.hole_card = hole_card
def receive_street_start_message(self, street, round_state):
pass
def receive_game_update_message(self, action, round_state):
pass
def receive_round_result_message(self, winners, hand_info, round_state):
pass
def start(update: Update, context: CallbackContext):
update.message.reply_text('Привет! Я - Покерный бот. Вот список доступных команд:')
commands = get_bot_commands()
for command in commands:
update.message.reply_text(f'/{command.command} - {command.description}')
def join(update: Update, context: CallbackContext):
user = update.message.from_user
if user.id not in context.chat_data:
context.chat_data[user.id] = user.username or user.first_name
update.message.reply_text(f'{user.username or user.first_name} присоединился к игре!')
else:
update.message.reply_text('Вы уже присоединились к игре.')
def start_poker_game(update: Update, context: CallbackContext):
if not context.chat_data:
update.message.reply_text('Недостаточно игроков. Напиши /join, чтобы присоединиться к игре.')
return
players = [{"name": str(user_id), "algorithm": PokerPlayer(user_id)} for user_id in context.chat_data.keys()]
random.shuffle(players)
players = players[:5]
config = setup_config(max_round=5, initial_stack=1000, small_blind_amount=20)
for player in players:
config.register_player(**player)
results = start_poker(config, None)
for result in results:
player_id = int(result["name"])
username = context.chat_data[player_id]
stack = result["stack"]
update.message.reply_text(f'{username} имеет {stack} фишек после игры.')
for player in players:
player_obj = player["algorithm"]
hole_card = " ".join([f"{SUIT_UNICODE[card.suit]}{card.rank}" for card in gen_cards(player_obj.hole_card)])
update.message.chat.send_message(player_obj.uuid, f'Ваши карты: {hole_card}')
def get_bot_commands():
return [
BotCommand(command="kadzy_poker", description="Запустить игру в покер"),
BotCommand(command="join_poker", description="Присоединиться к игре"),
BotCommand(command="poker", description="Запустить игру в покер"),
]
def main():
updater = Updater(TOKEN)
dp = updater.dispatcher
# Register bot commands
updater.bot.set_my_commands(get_bot_commands())
dp.add_handler(CommandHandler("start_poker", start))
dp.add_handler(CommandHandler("join", join))
dp.add_handler(CommandHandler("kadzy_poker", start_poker_game, filters=Filters.chat_type.groups))
dp.add_handler(CommandHandler("join_poker", join))
dp.add_handler(CommandHandler("poker", start_poker_game))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
Ошибка в консоли:
2023-04-22 14:18:52,448 - telegram.ext.dispatcher - ERROR - No error handlers are registered, logging exception.
Traceback (most recent call last):
File "C:\Users\gpsdr\AppData\Local\Programs\Python\Python311\Lib\site-packages\telegram\ext\dispatcher.py", line 555, in process_update
handler.handle_update(update, self, check, context)
File "C:\Users\gpsdr\AppData\Local\Programs\Python\Python311\Lib\site-packages\telegram\ext\handler.py", line 198, in handle_update
return self.callback(update, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\kadzy_poker_bot\kadzy_poker.py", line 73, in start_poker_game
player_id = int(result["name"])
~~~~~~^^^^^^^^
TypeError: string indices must be integers, not 'str'
Возникает после команды /kadzy_poker
, т.е., старт игры в групповом чате.
Источник: Stack Overflow на русском