commands = { "Нажми": "python3 /foor/bar/baz" }
session_id = requests.post(
"https://yug-krdr-itv04.svc.iptv.rt.ru/api/v2/user/sessions",
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)", "session_id": sess_id},
json={"login": email, "login_type": "email", "password": "1234567"},
).json() # значение session_id может быть не только строкой, но и целым числом, словарём, списком или None
return {"san": san, "session_id": session_id, "uid": ud} #в словарь оно пишется как есть
def requestBuilderWink(url, data=None, params=None, json=None, method=None):
register = regAccount()
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
"session_id": register["session_id"], # а потом используется как заголовок - тоже как есть
"x-rt-uid": register["uid"],
"x-rt-san": register["san"],
}
How can I distinguish a User and a GroupChat in message.chat?
Telegram Bot API support new type Chat for message.chat.
Check the type attribute in Chat object:
if message.chat.type == "private":
# private chat message
if message.chat.type == "group":
# group chat message
if message.chat.type == "supergroup":
# supergroup chat message
if message.chat.type == "channel":
# channel message
@decorator("params")
def myfunc(func_params):
pass
def myfunc(func_params):
pass
wrapper = decorator("params")
myfunc = wrapper(myfunc)
registered_funcs = []
def decorator(param):
#вложенная функция - фактический декоратор
def wrapper(func):
global registered_funcs
#запоминаем декорируемую функцию
registered_funcs.append( (param, func) )
return func #не забываем её вернуть
#возвращаем wrapper, чтобы им можно было продекорировать целевую функцию
return wrapper
#пример использования декоратора
@decorator("foo")
def myfunc(x):
print("Hello from myfunc(), ", x)
print(registered_funcs)
#>>> [ ("foo", <function myfunc at 0xdeadf00d>) ]
#и мы можем этим списком пользоваться, например:
for arg, func in registered_funcs:
func(arg)
@bot.message_handler(commands=['anketaone'])
def null_anketa_step(message):
pass
temp_wrapper = bot.message_handler(commands=['anketaone'])
def null_anketa_step(message):
pass
null_anketa_step = temp_wrapper(null_anketa_step)
def null_anketa_step(message):
pass
#какой-то другой обработчик
def some_other_handler(message):
pass
def init_bot(bot):
#а в этой функции мы регистрируем обработчики
bot.message_handler(commands=['anketaone']) (null_anketa_step)
#обрати внимание на две пары скобок. Вызов bot.message_handler() возвращает функцию (wrapper),
#и мы эту функцию тут же вызываем, передавая в неё обработчик
bot.message_handler(commands=['somethingelse']) (some_other_handler)
bot = ........ #создаём бота
from second_file import init_bot as init_second #импортируем второй файл
#функцию импортируем под другим именем, чтобы не было коллизий между файлами
init_second(bot) #вызываем функцию регистрации init_bot()
if __name__=='__main__':
bot.polling(none_stop=True)
@some_decorator
def some_func():
pass
def some_func():
pass
some_func = some_decorator(some_func)
@some_decorator(params)
def some_func():
pass
def some_func():
pass
wrapper = some_decorator(params)
some_func = wrapper(some_func)
def proxy(storage, *args, **kwargs):
def wrapper(func):
storage.append((func.__name__, args, kwargs))
return func
return wrapper
class MyCustomCog:
methods = []
def __init__(self, bot):
#задача конструктора - прочитать список отмеченных методов класса,
#и отдекорировать методы своего экземпляра класса (не одно и то же)
for fn, args, kwargs in self.methods:
#а тут вызываем декоратор вручную
#что там вместо bot.event? можно сделать несколько прокси, или добавить еще один параметр
decorator = bot.event(*args, **kwargs)
decorator(getattr(self, fn)) #теперь бот знает про наши обработчики событий
#декоратор-прокси запоминает все декорированые методы в список methods
#это можно реализовать и по другому, не суть. Главное, что мы запоминаем,
#с какими параметрами потом вызывать декоратор реального бота - всё, что после methods
@proxy(methods, "параметры", for="декоратора бота")
async def some_handler(self, params):
pass #обработчик того или иного события