当1个人使用该机器人时,该机器人运行良好。如果有人开始使用该漫游器,则dPoints
整数开始混乱。这是一项测试,可以帮助人们降低抑郁水平。
我有个主意。也许我可以为每个开始使用该机器人的人使用不同的dPoints.py文件。
例如user1_dPoints,user2_dPoints等。
如果您想测试我的机器人,看看有什么问题-这是我的电报:@kmuradoff
使用TeleBot制作的机器人
# imports
import sys
import time
import os
import config
import telebot
from telebot import types
# vars
dPoints = 0
bot = telebot.TeleBot(config.TOKEN)
@bot.message_handler(commands = ['points'])
def showPoints(message):
bot.send_message(message.chat.id, str(dPoints).format(
message.from_user, bot.get_me()))
@bot.message_handler(commands=['start', 'help'])
def welcome(message):
global dPoints
dPoints = 0
welcomeMarkup = types.ReplyKeyboardMarkup(resize_keyboard=True)
doTheTest = types.KeyboardButton("Начать тест")
welcomeMarkup.add(doTheTest)
bot.send_message(message.chat.id, "Добро пожаловать, {0.first_name}!".format(
message.from_user, bot.get_me()), reply_markup=welcomeMarkup)
@bot.message_handler(content_types=['text'])
def startingTest(message):
UserName = message.from_user.first_name
question0Heading = "----------- " + UserName + " -----------"
question1Answer = "N/A"
question2Answer = "N/A"
question3Answer = "N/A"
question4Answer = "N/A"
question5Answer = "N/A"
question6Answer = "N/A"
question7Answer = "N/A"
question8Answer = "N/A"
question9Answer = "N/A"
question10Answer = "N/A"
question11Answer = "N/A"
question12Answer = "N/A"
question13Answer = "N/A"
question14Answer = "N/A"
question15Answer = "N/A"
question16Answer = "N/A"
question17Answer = "N/A"
question18Answer = "N/A"
question19Answer = "N/A"
question20Answer = "N/A"
q1 = types.ReplyKeyboardMarkup(row_width=1)
q1s1 = types.KeyboardButton("Я не чувствую себя расстроенным, печальным.")
q1s2 = types.KeyboardButton("Я расстроен")
q1s3 = types.KeyboardButton("Я все время расстроен и не могу от этого отключиться.")
q1s4 = types.KeyboardButton("Я настолько расстроен и несчастлив, что не могу это выдержать.")
q1.add(q1s1, q1s2, q1s3, q1s4)
q2 = types.ReplyKeyboardMarkup(row_width=1)
q2s1 = types.KeyboardButton("Я не тревожусь о своем будущем.")
q2s2 = types.KeyboardButton("Я чувствую, что озадачен будущим.")
q2s3 = types.KeyboardButton("Я чувствую, что меня ничего не ждет в будущем.")
q2s4 = types.KeyboardButton("Мое будущее безнадежно, и ничто не может измениться к лучшему.")
q2.add(q2s1, q2s2, q2s3, q2s4)
q3 = types.ReplyKeyboardMarkup(row_width=1)
q3s1 = types.KeyboardButton("Я не чувствую себя неудачником.")
q3s2 = types.KeyboardButton("Я чувствую, что терпел больше неудач, чем другие люди.")
q3s3 = types.KeyboardButton("Когда я оглядываюсь на свою жизнь, я вижу в ней много неудач.")
q3s4 = types.KeyboardButton("Я чувствую, что как личность я - полный неудачник.")
q3.add(q3s1, q3s2, q3s3, q3s4)
while message.text == str(q21s1.text) or str(q21s2.text) or str(q21s3.text) or str(q21s4.text):
if message.chat.type == "private":
global dPoints
if message.text == "Начать тест":
markup = telebot.types.ReplyKeyboardRemove()
bot.send_message(message.chat.id, "ИНСТРУКЦИЯ".format(
message.from_user, bot.get_me()), reply_markup=markup)
time.sleep(1.5)
bot.send_message(message.chat.id, "Группа #1".format(
message.from_user, bot.get_me()), reply_markup=q1)
break
elif message.text == str(q1s1.text) or message.text == str(q1s2.text) or message.text == str(q1s3.text) or message.text == str(q1s4.text):
if message.text == str(q1s1.text):
dPoints = dPoints + 0
elif message.text == str(q1s2.text):
dPoints = dPoints + 1
elif message.text == str(q1s3.text):
dPoints = dPoints + 2
elif message.text == str(q1s4.text):
dPoints = dPoints + 3
markup = telebot.types.ReplyKeyboardRemove()
time.sleep(1)
bot.send_message(message.chat.id, "Вы ответили на 1 из 21 вопросов".format(
message.from_user, bot.get_me()), reply_markup=markup)
time.sleep(2)
bot.send_message(message.chat.id, "Группа #2".format(
message.from_user, bot.get_me()), reply_markup=q2)
break
elif message.text == str(q2s1.text) or message.text == str(q2s2.text) or message.text == str(q2s3.text) or message.text == str(q2s4.text):
if message.text == str(q2s1.text):
dPoints = dPoints + 0
elif message.text == str(q2s2.text):
dPoints = dPoints + 1
elif message.text == str(q2s3.text):
dPoints = dPoints + 2
elif message.text == str(q2s4.text):
dPoints = dPoints + 3
markup = telebot.types.ReplyKeyboardRemove()
time.sleep(1)
bot.send_message(message.chat.id, "Вы ответили на 2 из 21 вопросов".format(
message.from_user, bot.get_me()), reply_markup=markup)
time.sleep(2)
bot.send_message(message.chat.id, "Группа #3".format(
message.from_user, bot.get_me()), reply_markup=q3)
break
print("Bot Started Successfully")
bot.polling(none_stop=True)
答案 0 :(得分:0)
从example in GitHub repository的TeleBot library中可以看到,他们建议将user_dict
与每个chat_id
一起使用。您可以执行相同操作。
我还建议使用default_dict
。
# YOUR IMPORTS HERE
from collections import defaultdict
import config
import telebot
from telebot import types
bot = telebot.TeleBot(config.TOKEN)
# dict that will store all information per chat
user_info = defaultdict(dict)
# Show current amount of points to user
@bot.message_handler(commands = ['points'])
def show_points(message):
d_points = user_info[message.chat.id].get('d_points', 0)
bot.send_message(message.chat.id, 'You have {} d_points'.format(d_points).format(message.from_user, bot.get_me()))
# You method where value should be changed
@bot.message_handler(content_types=['text'])
def message_method(message):
points = 3
d_points = user_info[message.chat.id].get('d_points', 0)
user_info[message.chat.id] = d_points + points
bot.send_message(message.chat.id, 'Now you have: {} d_points'.format(d_points).format(message.from_user, bot.get_me()))