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
@bot.message_handler(content_types=['text'])
def get_command(message):
if message.text == "Start":
root = tk.Tk()
img = ImageTk.PhotoImage(Image.open('lol.png'))
createNewWindow(root, img)
root.mainloop()
elif message.text == "Stop":
root.destroy()
src = [['255', '255', '255', '190', '190', '160', '76', '45', '78'],
['255', '255', '255', '190', '190', '160', '76', '45', '78'],
['255', '255', '255', '190', '190', '160', '76', '45', '78']]
int_src = [ list(map(int, row)) for row in src ]
red = [ row[0::3] for row in src ] #подразумеваю, что у тебя составляющие идут в порядке RGB
green = [ row[1::3] for row in src ]
blue = [ row[2::3] for row in src ]
image = cv2.merge((blue, green, red)) #opencv по умолчанию хранит изображения в BGR, а не RGB
@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)
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}, карта ещё не задана.")
У меня получилось 4000 строк на 76 ключей
range='A3:A3',
for row in range(3, 130):
values_guid = service.spreadsheets().values().get(
spreadsheetId=spreadsheet_id,
range=f'A{row}:A{row}',
majorDimension='COLUMNS'
).execute()
#ну и так далее