-
Notifications
You must be signed in to change notification settings - Fork 1
/
bot_server.py
54 lines (39 loc) · 1.45 KB
/
bot_server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import os
import random
import telebot
from bot import ChatBotRegistry
from models import InferenceModel
from utils import read_yaml
def register_handlers(app, bot):
@bot.message_handler(commands=['start'])
def welcome(message):
bot.reply_to(message, app.welcome())
@bot.message_handler(func=lambda message: message.reply_to_message and message.reply_to_message.from_user.id == telegram_bot.get_me().id)
def on_reply(message):
bot.reply_to(message, app.answer(message.text))
@bot.message_handler(func=lambda message: True)
def on_message(message):
msg_text = message.text
if app.try_parse_command(msg_text):
bot.reply_to(message, f'Got new configuration: {str(app.config)}')
return
reaction = app.react(msg_text)
if reaction is not None:
pass # TODO Support emoji reactions on messages
if message.chat.type == 'group':
if app.name in msg_text:
bot.reply_to(message, app.answer(msg_text))
elif random.uniform(0, 1) <= app.config.response_prob_in_group:
bot.reply_to(message, app.answer(msg_text))
else:
bot.send_message(message.chat.id, app.answer(msg_text))
def run(app, bot):
register_handlers(app, bot)
telegram_bot.infinity_polling()
if __name__ == '__main__':
config = read_yaml('config/eval.yaml')
model = InferenceModel(config)
app = ChatBotRegistry.build('BasicChatBot', '@NeuralGrayBot', model)
token = os.getenv('BOT_TOKEN', default='TOKEN')
telegram_bot = telebot.TeleBot(token)
run(app, telegram_bot)