Как упомянул @snakecharmerb, в значениях вашего словаря вы должны быть именовать функции, не вызывающие их:
switcher = {
"location" : funcA,
"carousel" : funcB,
"button" : funcC,
"card" : funcD
}
И указать аргумент data.id
в return
оператор, если ключ существует в словаре:
return switcher[command[1]](data.id) if command[1] in switcher else funcE()
Также, вы можете заменить if not (data.message is None)
на if message
и объединить его с data.message[0] == "/"
.
Как указано @Марк Бэйли, поскольку вы уже проверяете, находится ли command[1]
в switcher
, вы можете полностью удалить второй оператор if
.
Всего:
if data.message and data.message[0] == "/":
command = data.message.split("/")
switcher = {
"location" : funcA,
"carousel" : funcB,
"button" : funcC,
"card" : funcD
}
return switcher[command[1]](data.id) if command[1] in switcher else funcE()
else:
return funcE()
Редактировать: Для поддержки передачи переменному числу аргументов в функции, вы можете указать список аргументов в словаре и передать его функции с распаковкой:
if data.message and data.message[0] == "/":
command = data.message.split("/")
switcher = {
"location" : [funcA,[data.id,data.name]],
"carousel" : [funcB,[data.id]],
"button" : [funcC,[data.id,data.name]],
"card" : [funcD,[data.id,data.name, data.time]]
}
return switcher[command[1]][0](*switcher[command[1]][1]) if command[1] in switcher else funcE()
else:
return funcE()