Телеграм бот для общего сбора в группах
Я использую Python и библитеку Aiogram. У моего бота есть база данных куда он записывает участников группы и при команде /all он должен сделать общий сбор в группе, то есть созвать всех участников группы упомянув их в отправленном им сообщении. Я знаю что можно сделать это при помощи закрепления сообщения, но это не то чего я хочу. У меня есть своя версия бота общего сбора, вот исходный код:
import logging
from aiogram.contrib.fsm_storage.memory import MemoryStorage
import random
import sqlite3
import time
API_TOKEN = '....'
logging.basicConfig(level=logging.INFO)
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
def db():
con = sqlite3.connect('zazivala.db')
cur = con.cursor()
cur.execute('CREATE TABLE IF NOT EXISTS db (users INTEGER, chats INTEGER)')
con.commit()
@dp.message_handler(text='/add')
async def new_commands(message: types.Message):
con = sqlite3.connect('zazivala.db')
cur = con.cursor()
result = cur.execute('SELECT users FROM db WHERE users = ? AND chats = ?', (message.from_user.id, message.chat.id)).fetchone()
if len(str(result)) == 4:
cur.execute('INSERT INTO db (users, chats) VALUES(?, ?)', (message.from_user.id, message.chat.id))
con.commit()
await message.reply(text='Добавил тебя в базу данных этого чата')
else:
await message.reply(text='Ты уже в базе данных этого чата')
@dp.message_handler(content_types=["left_chat_member"])
async def left_members(message):
con = sqlite3.connect('zazivala.db')
cur = con.cursor()
cur.execute('DELETE FROM db WHERE users = ?', (message.from_user.id,))
con.commit()
@dp.message_handler(text='/all')
async def call_all_users(message: types.Message):
con = sqlite3.connect('zazivala.db')
cur = con.cursor()
alls = cur.execute('SELECT users FROM db WHERE chats = ?', (message.chat.id,))
alls = alls.fetchall()
for user in alls:
text = ""
text += f'{user}'.replace('(', '').replace(',','').replace(')','').replace(' ','')
await message.answer(text=f'<a href="https://tg://user?id={text}">Общий сбор</a>', parse_mode=types.ParseMode.HTML)
await message.answer('Общий сбор проведён успешно')
@dp.message_handler(text='/remove')
async def remove_user(message: types.Message):
con = sqlite3.connect('zazivala.db')
cur = con.cursor()
await message.answer('✅ Ваш профиль был обновлен')
cur.execute(f'UPDATE db SET users = ? WHERE chats = ? AND users = ?', (message.from_user.id, message.chat.id, message.from_user.id))
con.commit()
if __name__ == "__main__":
db()
executor.start_polling(dp, skip_updates=True)```
В моей версии бот отправляет сообщение, но этим сообщением он не может упомянуть участников группы. И я не знаю как это по другому реализовать, и прошу вас помочь.