为什么机器人向私人消息而不是群组发送消息?

时间:2021-06-19 20:42:22

标签: python telegram telegram-bot

遇到了问题。我在聊天机器人的群聊中写了一条命令,他在私人消息中向我发送了回复,而不是在群组中。

常规命令,例如:/start、/bot 等 - 有效,但它通过私人消息中的内嵌按钮响应命令

代码如下:

import logging
import asyncio

from aiogram import Bot, Dispatcher, executor, types
from aiogram.utils.markdown import hbold, hunderline, hcode, hlink


API_TOKEN = 'TOKEN'

# Configure logging
logging.basicConfig(level=logging.INFO)

# Initialize bot and dispatcher
bot = Bot(token=API_TOKEN, parse_mode=types.ParseMode.HTML)
dp = Dispatcher(bot)


@dp.message_handler(commands='cat')
async def send_welcome(message: types.Message):
    # So... At first I want to send something like this:
    await message.reply("Вы хотите видеть много кисок? Вы готовы? ?")

    # Wait a little...
    await asyncio.sleep(1)

    # Good bots should send chat actions...
    await types.ChatActions.upload_photo()

    # Create media group
    media = types.MediaGroup()

    # Attach local file
    media.attach_photo(types.InputFile('data/cat.jpg'), 'Cat!')
    # More local files and more cats!
    media.attach_photo(types.InputFile('data/cats.jpg'), 'More cats!')

    # You can also use URL's
    # For example: get random puss:
    media.attach_photo('http://lorempixel.com/400/200/cats/', 'Random cat.')

    # And you can also use file ID:
    # media.attach_photo('<file_id>', 'cat-cat-cat.')

    # Done! Send media group
    await message.reply_media_group(media=media)
    
@dp.message_handler(commands='dog')
async def send_welcome(message: types.Message):
    # So... At first I want to send something like this:
    await message.reply("Вы хотите видеть много собачек? Вы готовы? ?")

    # Wait a little...
    await asyncio.sleep(1)

    # Good bots should send chat actions...
    await types.ChatActions.upload_photo()

    # Create media group
    media = types.MediaGroup()

    # Attach local file
    media.attach_photo(types.InputFile('data/c2b.jpg'), 'Dog!')
    # More local files and more cats!
    media.attach_photo(types.InputFile('data/c2a.jpg'), 'More dog!')
    media.attach_photo(types.InputFile('data/c2w.gif'), 'More dogs!')

    # Done! Send media group
    await message.reply_media_group(media=media)
    
@dp.message_handler(commands='music')
async def send_welcome(message: types.Message):
    # So... At first I want to send something like this:
    await message.reply("Вот и музычка подъехала! Вы готовы? ?")

    # Wait a little...
    await asyncio.sleep(1)
    
    await types.ChatActions.upload_photo()

    # Create media group
    media = types.MediaGroup()
    
    media.attach_audio(types.InputFile('data/ChillOut.mp3'), 'Music!')
    media.attach_audio(types.InputFile('data/REIMANN TEAM.mp3'), 'Music2!')
    media.attach_audio(types.InputFile('data/Mister Robot Поёт.mp3'), 'Music3!')
    
    # Done! Send media group
    await message.reply_media_group(media=media)
    
   
@dp.message_handler(commands='bot')
async def start_cmd_handler(message: types.Message):
    keyboard_markup = types.InlineKeyboardMarkup(row_width=3)
    # default row_width is 3, so here we can omit it actually
    # kept for clearness

    text_and_data = (
        ('Помощь ?', 'Помощь ?'),
        ('Правила ⚔️', 'Правила ⚔️'),
        ('Мануалы ?', 'Мануалы ?'),
    )
    # in real life for the callback_data the callback data factory should be used
    # here the raw string is used for the simplicity
    row_btns = (types.InlineKeyboardButton(text, callback_data=data) for text, data in text_and_data)

    keyboard_markup.row(*row_btns)
    keyboard_markup.add(
        # url buttons have no callback data
        types.InlineKeyboardButton('ReimannLogs ?', url='https://t.me/reimannlogs_bot'),
    )

    await message.reply("Здравствуй, сударь! ??\nС чем тебе нужна помощь?", reply_markup=keyboard_markup)


# Use multiple registrators. Handler will execute when one of the filters is OK
@dp.callback_query_handler(text='Правила ⚔️')  # if cb.data == 'no'
@dp.callback_query_handler(text='Помощь ?')  # if cb.data == 'yes'
@dp.callback_query_handler(text='Мануалы ?') 
async def inline_kb_answer_callback_handler(query: types.CallbackQuery):
    answer_data = query.data
    # always answer callback queries, even if you have nothing to say
    await query.answer(f'Вы выбрали пункт {answer_data!r}')

    if answer_data == 'Помощь ?':
        text = "Есть какие-то вопросы? ?\n \nВот реквезиты:\n \nПо всем вопросам: @FollHash ☯️\nПо всем вопросам, заявкам в тиму: @t3sse ☯️\n \nВот полезные команды, для развлекухи:\n \n/cat - киски ?\n/dog - собачки ?\n/music - музычка ?"
        
   
    elif answer_data == 'Правила ⚔️':
        text = """Пᴩᴀʙиᴧᴀ чᴀᴛᴀ ?

=======================

Зᴀᴨᴩᴇщᴇнᴏ: ?

- ᴧюбᴀя ᴋᴏʍʍᴇᴩция ʙ чᴀᴛᴇ (ᴨᴏᴋуᴨᴋᴀ/ᴨᴩᴏдᴀжᴀ)

- уᴋᴀɜыʙᴀᴛь иᴧи ᴨᴏʍᴇчᴀᴛь дᴩуᴦиᴇ ᴋᴀнᴀᴧы иᴧи бᴏᴛы

- ᴩᴇᴋᴧᴀʍᴀ иᴧи уᴨᴏʍинᴀниᴇ ᴨᴏхᴏжих ᴩᴇᴄуᴩᴄᴏʙ/ɯᴏᴨᴏʙ/нᴇйʍᴏʙ ʙ ᴧюбᴏʍ ᴋᴏнᴛᴇᴋᴄᴛᴇ

-  ᴨᴏᴨᴩᴏɯᴀйничᴇᴄᴛʙᴏ

-  ɜᴧᴏуᴨᴏᴛᴩᴇбᴧᴇниᴇ "CAPS LOCK"

-  ʙᴇᴄᴛи ᴄᴇбя нᴇᴀдᴇᴋʙᴀᴛнᴏ ʙ чᴀᴛᴇ и ᴩᴀɜʙᴏдиᴛь "ᴄᴩᴀч"

-  ᴏᴄᴋᴏᴩбᴧᴇниᴇ "мᴏдᴇᴩᴀции/ᴨᴩᴏᴇᴋᴛᴀ/ɯᴏᴨᴀ" - бᴀн ❗️

-  ᴏᴛᴨᴩᴀʙᴧяᴛь ᴄᴋᴩиʍᴇᴩы, ᴩᴀᴄчᴧᴇнᴇнᴋу, ᴄʙᴀᴄᴛиᴋу, нᴀциɜʍ, ᴋᴏнᴛᴇнᴛ ?

- ᴏɸᴏᴩʍᴧяᴛь ᴩᴀɜᴧичныᴇ ᴋᴀᴩᴛы, ᴀбуɜиᴛь ᴩᴇɸᴇᴩᴀᴧьную ᴄиᴄᴛᴇʍу, ᴄᴋᴀʍ и ᴏбʍᴀн ᴨᴏᴧьɜᴏʙᴀᴛᴇᴧᴇй

- ᴨᴩᴏᴨᴀᴦᴀндᴀ ᴨᴏᴧиᴛиᴋи

- ɸᴧуд\ᴄᴨᴀʍ ᴏдинᴀᴋᴏʙыʍи ɜᴀ ᴋᴏнᴛᴇᴋᴄᴛᴏʍ ᴄᴧᴏʙᴀʍи иᴧи ᴨᴩᴇдᴧᴏжᴇнияʍи (1 ᴨᴩᴇдуᴨᴩᴇждᴇниᴇ, ᴨᴏᴄᴧᴇ - ɯᴛᴩᴀɸ) """

    elif answer_data == 'Мануалы ?':
        text = "Краткий мануал о том как обрабатывать логи - https://telegra.ph/Kak-obrabatyvat-logi-05-30\nЗа привлечение новой аудитории, выдаю логи?"
        
    else:
        text = f'Unexpected callback data {answer_data!r}!'

    await bot.send_message(query.from_user.id, text)
    
    


if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

我不知道这与什么有关,希望您能帮助我。 使用 aiogram 中的现成作品制作机器人 @BotFather 做对了一切,但仍然写私人消息,而不是聊天

1 个答案:

答案 0 :(得分:0)

如果您不坚持使用其他库来使用 Telegram API,我建议您python-telegram-bot 这可能更适合您的工作,对于您的问题,Telegram 中的任何组都有一个组标识:

1- 将机器人添加到群组中。

2- 向机器人发送消息。

3- 转到以下网址:

https://api.telegram.org/botBOTTOKEN/getUpdates

4- 寻找 "chat":{"id":-GROUPCHATID};你的群聊 ID 一开始是负号。

5- 您可以测试使用 curl 向群组发送消息:

curl -X POST "https://api.telegram.org/bot{TOKEN}/sendMessage" -d "chat_id=-{GROUPCHATID}&text=Hi i am here in group"

我希望这对你有帮助:))