Запись Id юзер в бд бот Telegram Aiogram
Пытаюсь подключить к боту бд с id юзеров для дальнейшей рассылки сообщений от имени бота Использовал руководство https://habr.com/ru/post/552788 Пытался адаптировать под aiogram
Возникает ошибка, если написать боту "Раскидки":

Если написать боту "Раскидки"
Бот:
#import aiogram
import markups as nav
import sqlite3
import re
from aiogram import types, Bot, Dispatcher, executor, types
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.builtin import CommandStart
from aiogram.contrib.fsm_storage.memory import MemoryStorage
import asyncio
TOKEN = "..."
bot = Bot(token=TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot,storage=storage)
conn = sqlite3.connect('database.db', check_same_thread=False)
cursor = conn.cursor()
def db_table_val(user_id: int, user_name: str, user_surname: str, username: str):
cursor.execute('INSERT INTO test (user_id, user_name, username) VALUES (?, ?, ?, ?)', (user_id, user_name, username))
conn.commit()
async def on_startup(_):
arr = [] # абстрактный массив с юзер_айди
for user_id in arr:
await bot.send_message(chat_id=user_id, text="Бот запущен!")
await asyncio.sleep(1)
@dp.message_handler(commands=['start'])
async def command_start(message: types.Message):
user_channel_status = await bot.get_chat_member(chat_id='@...', user_id=message.from_user.id)
if user_channel_status["status"] != 'left':
await bot.send_message(message.from_user.id, 'Привет, {0.first_name}?? \n...'.format(message.from_user), reply_markup = nav.mainMenu)
else:
await bot.send_message(message.from_user.id, '... ')
@dp.message_handler()
async def bot_message(message: types.Message):
if message.text == '?...':
await bot.send_message(message.from_user.id, '... ')
elif message.text == 'Раскидки':
user_channel_status = await bot.get_chat_member(chat_id='@mmi', user_id=message.from_user.id)
if user_channel_status["status"] != 'left':
await bot.send_message(message.from_user.id, '⬇️...:', reply_markup = nav.mapsMenu)
await us_id == message.from_user.id
await db_table_val(user_id==us_id)
bot.polling(none_stop=True)
else:
await bot.send_message(message.from_user.id, '...')
if __name__ == '__main__':
executor.start_polling(dp, skip_updates = True, on_startup=on_startup)
Ответы (1 шт):
Автор решения: mamel
→ Ссылка
Я не совсем знакоток в этом, но зачем тебе эта строка? await us_id == message.from_user.id Ты можешь просто в БД передавать user_id
# import aiogram
import markups as nav
import sqlite3
import re
from aiogram import types, Bot, Dispatcher, executor, types
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.builtin import CommandStart
from aiogram.contrib.fsm_storage.memory import MemoryStorage
import asyncio
TOKEN = "..."
bot = Bot(token=TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
conn = sqlite3.connect('database.db', check_same_thread=False)
cursor = conn.cursor()
def db_table_val(user_id: int, user_name: str, user_surname: str, username: str):
cursor.execute('INSERT INTO test (user_id, user_name, username) VALUES (?, ?, ?, ?)',
(user_id, user_name, username))
conn.commit()
async def on_startup(_):
arr = [] # абстрактный массив с юзер_айди
for user_id in arr:
await bot.send_message(chat_id=user_id, text="Бот запущен!")
await asyncio.sleep(1)
@dp.message_handler(commands=['start'])
async def command_start(message: types.Message):
user_channel_status = await bot.get_chat_member(chat_id='@...', user_id=message.from_user.id)
if user_channel_status["status"] != 'left':
await bot.send_message(message.from_user.id, 'Привет, {0.first_name}?? \n...'.format(message.from_user),
reply_markup=nav.mainMenu)
else:
await bot.send_message(message.from_user.id, '... ')
@dp.message_handler()
async def bot_message(message: types.Message):
if message.text == '?...':
await bot.send_message(message.from_user.id, '... ')
elif message.text == 'Раскидки':
user_channel_status = await bot.get_chat_member(chat_id='@maskovmi', user_id=message.from_user.id)
if user_channel_status["status"] != 'left':
await bot.send_message(message.from_user.id, '⬇️...:', reply_markup=nav.mapsMenu)
db_table_val(user_id=message.from_user.id, user_name=message.from_user.username, user_surname=message.from_user.first_name, username='') # Тут я не знаю, зачем тебе 2 username
else:
await bot.send_message(message.from_user.id, '...')
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True, on_startup=on_startup)
И будет лучше, если сохранение в БД делать после нажатия /start. Ибо человек может не писать "Раскидки", и тогда он не попадет в базу