@Sellisent

Как запустить tg бота с другим токеном из основного кода?

Есть следующий код:
main.py
def new_request(userid, token)
       бла бла бла
        bot = Thread(target=bot_start(), args=(params["token"], ))
        bot.start()       
        tgbot.startbot()

def start_bot(token):
       // вот тут надо как то запустить код из tgbot.py

tgbot.py
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

TOKEN = тут надо каким то образом получить токен

bot = Bot(token=TOKEN)
dp = Dispatcher(bot)


@dp.message_handler(commands=['start'])
async def process_start_command(message: types.Message):
    await message.reply("Привет!\nНапиши мне что-нибудь!")


@dp.message_handler(commands=['help'])
async def process_help_command(message: types.Message):
    await message.reply("Напиши мне что-нибудь, и я отпрпавлю этот текст тебе в ответ!")


@dp.message_handler()
async def echo_message(msg: types.Message):
    await bot.send_message(msg.from_user.id, msg.text)


if __name__ == '__main__':
    executor.start_polling(dp)

Как вы уже поняли main.py должен запускать код из tgbot.py в отдельном потоке, но я как это реализовать я не знаю) Прошу вашей помощи)))
  • Вопрос задан
  • 2806 просмотров
Решения вопроса 1
@AlbertForest
Если я правильно понял, ты хочешь несколько ботов запустить в одной программе. (Другой причины использовать потоки я не увидел)

Можно сделать так:
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
import asyncio

tokens = ['token1', 'token2']

async def start_bot(dp):
    event_loop.create_task(dp.start_polling())
    
def bot_init(event_loop, token):
    bot = Bot(token)
    dp = Dispatcher(bot=bot)
    
    @dp.message_handler(commands=['start'])
    async def process_start_command(message: types.Message):
        await message.reply("Привет!\nНапиши мне что-нибудь!")
    
    event_loop.run_until_complete(start_bot(dp))

if __name__ == '__main__':
    event_loop = asyncio.get_event_loop()
    
    for token in tokens: # тут можешь реализовать приемник токенов извне
        bot_init(event_loop, token)
        
    event_loop.run_forever()


Это работает, но сам бы я так не делал. Вебхуки были бы куда практичнее.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы