user_status = {}
@bot.message_handler ...
def process_something(message):
if user_status.get(message.from_user.id, 0) == 0:
user_status[message.from_user.id] == 1
start_our_process()
...
for plate in plates:
x, y, w, h = plate
centreX = int((x + (x + w)) / 2)
...
@bot.message_handler(commands=['search'])
def search(message):
if ' ' in message.text:
param = message.text.split(maxsplit=1)[1]
...
else:
bot.send_message(message.chat.id, 'no params')
/search XXX
# на верхнем уровне объявляем наш словарь
wind_info = {}
...
elif w1 > 33:
w_info = 'Огромные разрушения, серьезно повреждены здания, строения и дома, деревья вырваны с корнями, растительность уничтожена.'
# после определения w_info заносим эти данные в наш словарь
wind_info[message.text] = w_info # т.к. message.text это наш город (вообще хорошо бы его сразу в отдельную переменную выделять, так код проще читается)
item_wind = types.InlineKeyboardButton(text = 'Ветер', callback_data = f'wind_{message.text}')
elif call.data == 'wind':
elif call.data.startswith('wind'):
# извлекаем название города
city = call.data.split('_',1)[1]
# и берем нашу информацию из словаря данных по ветру
w_info = wind_info[city]
bot.send_message(call.message.chat.id, w_info)
def get_top_surviveds(self, limit=3):
with self.connection:
return self.cursor.execute("SELECT * FROM stats ORDER BY survived desc LIMIT ?", (limit, )).fetchall()
class SQLighter:
def __init__(self, database):
self.connection = sqlite3.connect(database, check_same_thread = False)
self.connection.row_factory = sqlite3.Row # этой строкой указываем, что результат получаем в виде словаря
self.cursor = self.connection.cursor()
self.cursor.execute("CREATE TABLE IF NOT EXISTS stats (user_id INT, user_name TEXT, survived INT, infected INT)")
...
# и можно сделать такую функцию, возвращающую всю информацию пользователя
def get_info(self, id):
with self.connection:
return self.cursor.execute("SELECT * FROM stats WHERE user_id=?", (id, )).fetchone()
sql_lighter = SQLighter("database.db")
sql_lighter.add_user(982543922, "Владимир", 1, 1)
# затем получаем весь словарь данных и можем использовать любые нужные поля из него
data = sql_lighter.get_info(982543922)
print(data)
print(data['user_name'])
print("Информация пользователя {}: имя: {}, survived: {}, infected: {}".format(data['user_id'], data['user_name'], data['survived'], data['infected']))
@bot.messege_handler(content_types=['text'])
@bot.handler_backends(content_types=['text'])
@bot.message_handler(content_types=['text'])
CREATE TABLE IF NOT EXISTS post_likes (
id integer primary key,
post_id integer, -- id поста
user_id integer, -- id пользователя
likes integer
);
select sum(likes) total_score, -- общий счет
sum(case likes when 1 then 1 end) sum_likes, -- кол-во лайков
sum(case likes when -1 then 1 end) sum_dislikes -- кол-во дизлайков
from post_likes where post_id = нужный_id_поста
bot.register_next_step_handler(sent, audio_description, audio)
...
def audio_description(message, audio):
CREATE TABLE users (
user_id INTEGER PRIMARY KEY # чтобы заполнялся автоматически, тогда вообще не нужно указывать id, он всегда будет проставляться автоматом новый
user_name TEXT);
cur.execute('''INSERT INTO users(user_name) VALUES(?)''', (user_name, ))
CREATE TABLE users (
user_id INTEGER UNIQUE, # если планируется самостоятельно заносить id
user_name TEXT);
cur.execute('''INSERT OR IGNORE INTO users(user_id, user_name) VALUES(?, ?)''', (user_id, user_name))
photo = max(message.photo, key=lambda x: x.height)
file_id = photo.file_id
@bot.message_handler(commands = ['info'])
def send_info(message):
bot.send_message(message.chat.id, f'data={data}')
states = {"kb":None}
def ... клавиатура1
keyboard = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = telebot.types.KeyboardButton(f'Да')
button2 = telebot.types.KeyboardButton(f'Нет')
keyboard.row(button1, button2)
states["kb"] = "kb1"
bot.send_message(message.chat.id, message, reply_markup=keyboard)
def ... клавиатура2
keyboard = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = telebot.types.KeyboardButton(f'Да')
button2 = telebot.types.KeyboardButton(f'Нет')
keyboard.row(button1, button2)
states["kb"] = "kb2"
bot.send_message(message.chat.id, message, reply_markup=keyboard)
@bot.message_handler(content_types=['text'])
def echo_text(message):
if states["kb"] == "kb1":
if message.text == 'Да':
elif states["kb"] == "kb2":
if message.text == 'Да':
class DataBase():
def __init__(self, database_name):
self.conn = sqlite3.connect(database_name)
self.cursor = self.conn.cursor()
def commit(self):
self.conn.commit()
def close(self):
self.conn.close()
# создаем объект класса
db = DataBase('my_db.db')
cursor = db.cursor
# и в любой функции можем использовать
cursor.execute ...
db.commit()
@bot.message_handler(content_types=['document'])
def get_file(message):
file_name = message.document.file_name
file_info = bot.get_file(message.document.file_id)
with open(file_name, "wb") as f:
file_content = bot.download_file(file_info.file_path)
f.write(file_content)
bot.reply_to(message, f"OK. Сохранил {file_name}")
@bot.message_handler(content_types=['video'])
def get_file(message):
file_name = message.json['video']['file_name']
file_info = bot.get_file(message.video.file_id)
with open(file_name, "wb") as f:
file_content = bot.download_file(file_info.file_path)
f.write(file_content)
bot.reply_to(message, f"OK. Сохранил {file_name}")
owm = pyowm.OWM(OWM_KEY, {'language': 'ru'})
mgr = owm.weather_manager()
observation = mgr.weather_at_place(location)
bot.send_message(message.chat.id, 'Введите текст')
bot.register_next_step_handler(message, get_text)
def get_text(message):
message.text будет как раз запрашиваемый текст