Я пытаюсь это сделать, есть база данных mysql, в которой записаны идентификатор пользователя, имя пользователя и его роль. При запуске скрипта все нормально, кнопки для каждого пользователя распределяются по мере необходимости, но когда я меняю роль одного из пользователей, в tg-боте ничего не меняется(не обновляется клавиатура у пользователя в зависимости от роли). Все это происходит до перезапуска самого скрипта. Есть ли какой-нибудь способ решить эту проблему? Код:
from aiogram import Bot, Dispatcher, executor, types
import mysql.connector
# Initialization of the bot and the dispatcher
bot = Bot(token="Bot_token")
dp = Dispatcher(bot)
# Connecting to the MySQL database
db = mysql.connector.connect(
host="localhost",
user="Goose",
password="password",
database="users" # It is assumed that you have a "users" table with a "role" column
)
cursor = db.cursor()
# Function to get all users from the database
def get_all_users():
query = "SELECT id, name, role FROM users"
cursor.execute(query)
return cursor.fetchall()
# Let's define a function for getting buttons depending on the user's role
def get_buttons_for_role(role):
if role == "admin":
buttons = ["All users"]
elif role =="manager":
buttons = ["Applications", "Moderation", "Suppliers"]
elif role == "members":
buttons = ["Send a post", "Posts", "Layout"]
elif role == "user":
buttons = ["I want to cooperate", "Help"]
else:
buttons = [] # There are no buttons by default
return buttons
# Handler function for the "Show users" button
async def show_users(message: types.Message, users):
response = "List of users:\n"
for user in users:
response += f"Name: {user[1]}, ID: {user[0]}, Role: {user[2]}\n"
await message.answer(response)
# Handler for the /start command
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
user_id = message.from_user.id
# Getting the user role from the database
cursor.execute("SELECT role FROM users WHERE id = %s", (user_id,))
user_role = cursor.fetchone()[0]
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
# We get buttons depending on the user's role
role_buttons = get_buttons_for_role(user_role)
for button_text in role_buttons:
keyboard.add(types.KeyboardButton(button_text))
await message.answer("Select action:", reply_markup=keyboard)
# Handler for the "All users" button
@dp.message_handler(text="All users")
async def handle_show_all_users(message: types.Message):
users = get_all_users() # Getting all users from the database
await show_users(message, users)
# Launching the bot
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)