telethon Проблема с обработчиком событий, бот дает ответ не дожидаясь ответа пользователя
При нажатии на клавишу "Найти слово в списке стоп-слов" бот выдаёт ответ "Слово "Найти слово в списке стоп-слов" отсутствует в списке стоп-слов." не дожидаясь нового сообщения, что может быть не так.
from telethon import TelegramClient, events
from telethon.tl.custom import Button
api_id =
api_hash =
bot_token =
owner_id =
STATUS = False
waiting_for_input = {}
client = TelegramClient('bot', api_id, api_hash).start(bot_token=bot_token)
def create_keyboard_admin():
keybord = [
[Button.text('Статус парсинга'), Button.text('Редактирование стоп-слов')],
[Button.text('Редактирование строгих слов'), Button.text('Редактирование гибких слов')],
[Button.text('Запустить парсинг'), Button.text('Остановить парсинг')]
]
return keybord
def create_keyboard_edit_stop_words():
keybord = [
[Button.text('Показать весь список стоп-слов'), Button.text('Найти слово в списке стоп-слов')],
[Button.text('Добавить стоп-слово'), Button.text('Удалить стоп-слово')]
]
return keybord
def create_keyboard_edit_without_accuracy_word():
keybord = [
[Button.text('Показать весь список гибких слов'), Button.text('Найти слово в списке гибких слов')],
[Button.text('Добавить слово в список гибких слов'), Button.text('Удалить слово из списка гибких слов')]
]
return keybord
def create_keyboard_edit_accuracy_word():
keybord = [
[Button.text('Показать весь список строгих слов'), Button.text('Найти слово в списке строгих слов')],
[Button.text('Добавить слово в список строгих слов'), Button.text('Удалить слово из списка строгих слов')]
]
return keybord
@client.on(events.NewMessage(pattern='/start'))
async def start(event):
if event.sender_id == owner_id:
await event.respond('Панель активна')
else:
await event.respond('У вас нет доступа')
@client.on(events.NewMessage(pattern='/admin'))
async def admin_panel(event):
if event.sender_id == owner_id:
await event.respond('Это админ панель! Используйте команды для управления ботом.', buttons=create_keyboard_admin())
else:
await event.respond('У вас нет доступа к этой команде.')
@client.on(events.NewMessage(pattern='Статус парсинга'))
async def status(event):
if event.sender_id == owner_id:
await event.respond('Cтатус парсинга:')
if STATUS == True:
await client.send_message(event.sender_id, "Парсинг в процессе")
else:
await client.send_message(event.sender_id, 'Парсинг выключен')
else:
await event.respond('У вас нет доступа к этой команде.')
@client.on(events.NewMessage(pattern='Редактирование стоп-слов'))
async def edit_stop_word(event):
if event.sender_id == owner_id:
await event.respond('Редактирование стоп-слов, для возвращения в главное меню используйте /admin:')
if STATUS == True:
await client.send_message(event.sender_id, 'Редактирование стоп-слов запрещено, парсер запущен в данный момент')
else:
await client.send_message(event.sender_id, 'Редактирование стоп-слов разрешено', buttons=create_keyboard_edit_stop_words())
else:
await event.respond('У вас нет доступа к этой команде.')
@client.on(events.NewMessage(pattern='Редактирование строгих слов'))
async def edit_accuracy_word(event):
if event.sender_id == owner_id:
await event.respond('Редактирование строгих слов, для возвращения в главное меню используйте /admin:')
if STATUS == True:
await client.send_message(event.sender_id, 'Редактирование строгих слов запрещено, парсер запущен в данный момент')
else:
await client.send_message(event.sender_id, 'Редактирование строгих слов разрешено', buttons=create_keyboard_edit_accuracy_word())
else:
await event.respond('У вас нет доступа к этой команде.')
@client.on(events.NewMessage(pattern='Редактирование гибких слов'))
async def edit_without_accuracy_word(event):
if event.sender_id == owner_id:
await event.respond('Редактирование гибких слов, для возвращения в главное меню используйте /admin:')
if STATUS == True:
await client.send_message(event.sender_id, 'Редактирование гибких слов запрещено, парсер запущен в данный момент')
else:
await client.send_message(event.sender_id, 'Редактирование гибких слов разрешено', buttons=create_keyboard_edit_without_accuracy_word())
else:
await event.respond('У вас нет доступа к этой команде.')
@client.on(events.NewMessage(pattern='Запустить парсинг'))
async def start_parsing(event):
global STATUS
if event.sender_id == owner_id:
if STATUS == False:
await event.respond('Запуск парсинга')
STATUS = True
else:
await event.respond('Парсинг уже активен')
else:
await event.respond('У вас нет доступа к этой команде.')
@client.on(events.NewMessage(pattern='Остановить парсинг'))
async def stop_parsing(event):
global STATUS
if event.sender_id == owner_id:
if STATUS == True:
await event.respond('Остановка парсинга')
else:
await event.respond('Остановка не удалась, парсинг уже выключен')
else:
await event.respond('У вас нет доступа к этой команде.')
@client.on(events.NewMessage(pattern='Показать весь список стоп-слов'))
async def show_full_list_stop_words(event):
if event.sender_id == owner_id and STATUS == False:
list_stop_words = []
with open('stop words.txt', 'r') as f:
for line in f.readlines():
list_stop_words.append(str(line.strip()))
stop_words_message = '; '.join(list_stop_words)
await event.respond(stop_words_message)
else:
await event.respond('У вас нет доступа к этой команде.')
@client.on(events.NewMessage(pattern='Найти слово в списке стоп-слов'))
async def buttons_search_word_in_stop_words(event):
if event.sender_id == owner_id and not STATUS:
waiting_for_input[event.sender_id] = 'search_word'
await client.send_message(event.sender_id, 'Введите интересующее вас стоп-слово')
else:
await event.respond('У вас нет доступа к этой команде.')
@client.on(events.NewMessage(pattern='Добавить стоп-слово'))
async def add_stop_words(event):
if event.sender_id == owner_id:
pass
@client.on(events.NewMessage(pattern='Удалить стоп-слово'))
async def delete_stop_words(event):
if event.sender_id == owner_id:
pass
pass
@client.on(events.NewMessage())
async def handle_response(event):
if event.sender_id in waiting_for_input:
state = waiting_for_input[event.sender_id]
if state == 'search_word':
search_word = event.text
with open('stop words.txt', 'r') as f:
data = [line.strip() for line in f.readlines()]
if search_word in data:
await event.respond(f'Слово "{search_word}" есть в списке стоп-слов.')
else:
await event.respond(f'Слово "{search_word}" отсутствует в списке стоп-слов.')
del waiting_for_input[event.sender_id]
client.run_until_disconnected()