Eleksius
@Eleksius
Python (tkinter), c#

Почему бот дважды выполняет команду (telebot)?

Привет, вот код:
import telebot as tb
from telebot import  types

TOKEN = 'token'
bot = tb.TeleBot(TOKEN)



@bot.message_handler(commands = ['q'])
def q_message(message):
    users = bot.get_chat_members_count(message.chat.id)
    msg = message.text[2:]
    for user in range(users):
        try:
            bot.send_message(message.chat.id, msg)
        except:
            print("except")

if __name__ == '__main__':
    bot.polling(non_stop=True)


Этот код должен рассылать сообщение всем пользователям бота, но проблема в том, что код присылает сообщение дважды. Буду благодарен, если кто то поможет
  • Вопрос задан
  • 262 просмотра
Решения вопроса 2
@twistfire92
Python backend developer
Для того, чтобы бот делал рассылку всем пользователям, вам нужно где-то хранить список всех пользователей. Вносить туда новых, когда кто-то новый начинает взаимодействовать с ботом.

Когда пользователь пишет боту лично, то он находится в чате с самим ботом, где участников 2 - пользователь и бот. Поэтому bot.get_chat_members_count(message.chat.id) выдаст всегда значение 2.
Если бот будет админом в какой-либо группе, тогда уже выведется количество участников этой группы.

Вот теперь вы берете и проходите в цикле 2 раза, отправляя в этот чат сообщение.

Вам же надо где-то хранить все id пользователей, с кем бот взаимодействует. Когда будет отлавливаться нужная команда, проходить в цикле по всем id и отправлять им нужный текст сообщения. Можно из этого списка во время отправки исключить текущего пользователя, чтобы самому не получить сообщение.
Ответ написан
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Почему бот дважды выполняет команду (telebot)?

Присмотритесь внимательнее на свой код, в цикле происходит отправка одного и того же сообщения столько раз, сколько пользователей в чате (дважды, если пользователей в чате тоже двое):
for user in range(users):
    try:
        bot.send_message(message.chat.id, msg)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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