Python - discord.py on_message - передать позиционные аргументы - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь включить позиционные аргументы в функцию on_message с помощью discord.py, но получаю сообщение об ошибке ниже

 File "/usr/lib/python3.8/site-packages/discord/client.py", line 312, in _run_event
    await coro(*args, **kwargs)
TypeError: on_message() missing 3 required positional arguments: 'channels', 'textdata', and 'command'

Моя цель - передать каналы - имя канала на сервере Discord, текстовые данные - путь к текстовому файлу, команда - команда, которую пользователь введет в канал разногласий для возврата данных.

Я просто хотел спросить, можно ли передавать позиционные аргументы в on_message или сообщение может быть единственным ?

У меня есть код

channels =[]

@client.event
async def on_message(message, channels , textdata, command):
    
    id = client.get_guild(7319460*****229982)
    
    
    
    
    if str(message.channel) in channels:
        if message.content.find(command) != -1:

            with open(textdata, 'r') as file:
                msg = file.read(2000).strip()
                while len(msg) > 0:
                    await message.author.send(msg)
                    msg = file.read(2000).strip()
                    
def callall():
    on_message(channels="boxingmma",  textdata="/home/brendan/Desktop/Python/liveonsatscraper/testlasttime.txt", command="!boxingfixtures")

Причина, по которой я пытаюсь это сделать, заключается в том, что мне нужно иметь возможность запускать приведенный выше код на нескольких каналах Discord, чтобы выводить данные из пути к файлам в текстовых данных и предоставить другую команду в зависимости от требуемых данных. Я мог бы скопировать приведенный выше код 100 раз и ввести жестко закодированные строковые значения для каждого из аргументов, но я подумал, что было бы лучше передать эти значения в функцию выше, чтобы сохранить повторяющийся код.

Заранее благодарю любой, кто может предоставить руководство или решение этой проблемы.

1 Ответ

1 голос
/ 14 июля 2020

Когда бот получает сообщение через on_message, есть только один параметр: message. Это отдельный класс, но его можно разбить на:

message.content #what was said, string
message.channel #which channel it was said in, channel class
message.guild #which server it was said in, guild class
message.author #who sent the message, user class

И вы можете go оттуда.

{EDIT}

Если вы хотите, чтобы он также мог анализировать команды, сделайте так:

@bot.event
async def on_message(message):
    if message.author == bot.user: return #makes it so the bot doesn't listen to itself
    await bot.process_commands(message)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...