@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)
activities = sum([], (member.activities for member in ctx.guild.members))
game_names = [item.name for item in activities if instanceof(item, discord.Game)]
#если нужно только уникальные:
game_names = set(game_names)
@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)
[
{
"inputs" : [ "привет", "здорово" ],
"responses" : [ "привет {0}", "и тебе приветы" ]
},
{
"inputs" : [ "пока" ],
"responses" : [ "досвидос, {0}", "и тебе удачи!" ]
},
]
current_url = None #храним ссылку в глобальной переменной
@slash.slash(name = 'lastmap', description = 'последняя версия карты', options = [{"name": "ur", "description": "ссылка", "type": 3, "required": True}], guild_ids = [907669402181316638])
@client.command(aliase = ['lastmap'])
@commands.has_any_role(907669402181316638)
async def lastmap(ctx, *, ur):
global current_url
id = ctx.author.display_name
current_url = ur
embedVar = discord.Embed(title="Карта", description=f"{id}, карта обновлена, ссылка: {current_url}")
embedVar.set_image(url='https://media.discordapp.net/attachments/902258027648917524/907969211312271360/unknown.png')
await ctx.send(embed=embedVar)
@slash.slash(name = 'map', description = 'последняя версия карты', options = [{"name": "text", "description": "текст", "type": 3, "required": True}], guild_ids = [907669402181316638])
@client.command(aliase = ['map'])
@commands.has_any_role(907669402181316638)
async def map(ctx, *, text):
global current_url
id = ctx.author.display_name
if current_url: #проверяем, задана ли карта
embedVar = discord.Embed(title="Карта", description=f"Держи карту, {id}. Только зачем ты написал {text}?")
embedVar.set_image(url=f'{current_url}')
await ctx.send(embed=embedVar)
else:
await ctx.send(f"Извини, {id}, карта ещё не задана.")