Stack Overflow на русском Asked by Daily Chinese on November 26, 2020
бот не отвечает на сообщения в группе ( но если напрямую ему писать, то работает)
я создала группу для теста : https://t.me/gynui и у меня не получается его туда добавить
import telebot
import config
import dbworker
bot = telebot.TeleBot(config.TOKEN)
name = '';
surname = '';
age = 0;
@bot.message_handler(content_types=['text'])
def start(message):
if message.text == 'к':
bot.send_message(message.from_user.id, "Как тебя зовут?");
bot.register_next_step_handler(message, get_name); #следующий шаг – функция get_name
else:
bot.send_message(message.from_user.id, 'Напиши "к"');
def get_name(message): #получаем фамилию
global name;
name = message.text;
bot.send_message(message.from_user.id, 'Какая у тебя фамилия?');
bot.register_next_step_handler(message, get_surname);
def get_surname(message):
global surname;
surname = message.text;
bot.send_message(message.from_user.id,'Сколько тебе лет?');
bot.register_next_step_handler(message, get_age);
def get_age(message):
global age;
def get_age(message):
global age;
while age == 0: #проверяем что возраст изменился
try:
age = int(message.text) #проверяем, что возраст введен корректно
except Exception:
bot.send_message(message.from_user.id, 'Цифрами, пожалуйста');
from telebot import types
keyboard = types.InlineKeyboardMarkup(); #наша клавиатура
key_yes = types.InlineKeyboardButton(text='Да', callback_data='yes'); #кнопка «Да»
keyboard.add(key_yes); #добавляем кнопку в клавиатуру
key_no= types.InlineKeyboardButton(text='Нет', callback_data='no');
keyboard.add(key_no);
question = 'Тебе '+str(age)+' лет, тебя зовут '+name+' '+surname+'? пришла скупиться';
bot.send_message(message.from_user.id, text=question, reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
if call.data == "yes": #call.data это callback_data, которую мы указали при объявлении кнопки
bot.send_message(call.message.chat.id, 'давай тебе что-то подберем : )');
elif call.data == "no":
bot.send_message(call.message.chat.id, 'нет : )');
def user_entering_age(message):
# А вот тут сделаем проверку
if not message.text.isdigit():
# Состояние не меняем, поэтому только выводим сообщение об ошибке и ждём дальше
bot.send_message(message.chat.id, "Что-то не так, попробуй ещё раз!")
return
# На данном этапе мы уверены, что message.text можно преобразовать в число, поэтому ничем не рискуем
if int(message.text) < 5 or int(message.text) > 100:
bot.send_message(message.chat.id, "Какой-то странный возраст. Не верю! Отвечай честно.")
return
else:
# Возраст введён корректно, можно идти дальше
bot.send_message(message.chat.id, "Когда-то и мне было столько лет...эх... Впрочем, не будем отвлекаться. "
"Отправь мне какую-нибудь фотографию.")
dbworker.set_state(message.chat.id, config.States.S_SEND_PIC.value)
@bot.message_handler(content_types=["photo"],
func=lambda message: dbworker.get_current_state(message.chat.id) == config.States.S_SEND_PIC.value)
def user_sending_photo(message):
# То, что это фотография, мы уже проверили в хэндлере, никаких дополнительных действий не нужно.
bot.send_message(message.chat.id, "Отлично! Больше от тебя ничего не требуется. Если захочешь пообщаться снова - "
"отправь команду /start.")
dbworker.set_state(message.chat.id, config.States.S_START.value)@bot.message_handler(content_types=['text'])
def get_text_messages(message):
if message.text == "Привет":
bot.send_message(message.from_user.id, "Привет, сейчас я расскажу тебе гороскоп на сегодня.")
elif message.text == "/help":
bot.send_message(message.from_user.id, "Напиши Привет")
else:
bot.send_message(message.from_user.id, "Я тебя не понимаю. Напиши /help.")
@bot.message_handler(commands=["start"])
def cmd_start(message):
state = dbworker.get_current_state(message.chat.id)
if state == config.States.S_ENTER_NAME.value:
bot.send_message(message.chat.id, "Кажется, кто-то обещал отправить своё имя, но так и не сделал этого :( Жду...")
elif state == config.States.S_ENTER_AGE.value:
bot.send_message(message.chat.id, "Кажется, кто-то обещал отправить свой возраст, но так и не сделал этого :( Жду...")
elif state == config.States.S_SEND_PIC.value:
bot.send_message(message.chat.id, "Кажется, кто-то обещал отправить картинку, но так и не сделал этого :( Жду...")
else: # Под "остальным" понимаем состояние "0" - начало диалога
bot.send_message(message.chat.id, "Привет! Как я могу к тебе обращаться?")
dbworker.set_state(message.chat.id, config.States.S_ENTER_NAME.value)
bot.remove_webhook()
bot.polling(none_stop=True,interval =0)
У ботов по-умолчанию включены настройки приватности.
Если бот в группе не администратор, то он видит только те сообщения, которые адресованы лично ему.
Т.е. сообщение /start
бот не получит, а /start@MyBot
- получит.
Есть 2 варианта решения:
Privacy Mode
в настройках бота у @BotFatherCorrect answer by Oleg on November 26, 2020
я не добавила id чата, поэтому код не работал.
Answered by Daily Chinese on November 26, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP