问题描述
我已经尝试了很长时间来添加缺少的参数,但我的尝试失败了。 我目前对 Python 不是很擅长,代码还没有完成,所以如果我不能很好地解释一些东西,请理解。
这是我的错误:
Ignoring exception in on_message
Traceback (most recent call last):
File "C:\Users\...\Programs\Python\Python38-32\lib\site-packages\discord\client.py", line 312, in _run_event
await coro(*args, **kwargs)
TypeError: on_message() missing 1 required positional argument: 'self'
这是我的代码的一部分:
import asyncio
import discord
from discord import Member
client = discord.Client()
regel_channel_id = someid
class MyClient(discord.Client):
async def on_ready(self):
print('Logged in as')
print(self.user.name)
print(self.user.id)
print('------')
@client.event
async def on_message(message, self):
if '$artikel' in message.content:
await message.channel.send('Question here')
def artikelanswer(m):
return m.author == message.author and m.content.isstring()
try:
Titel = await self.wait_for('message', check=artikelanswer, timeout=10.0)
except asyncio.TimeoutError:
return await message.channel.send('Sorry, you took too long!.')
print(Titel)
client.run("SECRET TOKEN")
我希望你能尽可能简单地解释这个问题。 先感谢您。
1楼
呃,主要问题是你正在创建一个MyClient
类,但没有使用它。
那么,2个解决方案:
1. 你想使用MyClient
类
所以你的代码缩进是错误的,你需要正确缩进on_message()
函数。
import asyncio
import discord
from discord import Member
regel_channel_id = someid
class MyClient(discord.Client):
async def on_ready(self):
print('Logged in as')
print(self.user.name)
print(self.user.id)
print('------')
async def on_message(self, message):
if '$artikel' in message.content:
await message.channel.send('Question here')
def artikelanswer(m):
return m.author == message.author and m.content.isstring()
try:
Titel = await self.wait_for('message', check=artikelanswer, timeout=10.0)
except asyncio.TimeoutError:
return await message.channel.send('Sorry, you took too long!.')
print(Titel)
client = MyClient()
client.run("SECRET TOKEN")
2. 你不想使用MyClient
类
所以你不能使用self
。
import asyncio
import discord
from discord import Member
client = discord.Client()
regel_channel_id = someid
@client.event
async def on_ready(self):
print('Logged in as')
print(self.user.name)
print(self.user.id)
print('------')
@client.event
async def on_message(message):
if '$artikel' in message.content:
await message.channel.send('Question here')
def artikelanswer(m):
return m.author == message.author and m.content.isstring()
try:
Titel = await self.wait_for('message', check=artikelanswer, timeout=10.0)
except asyncio.TimeoutError:
return await message.channel.send('Sorry, you took too long!.')
print(Titel)
client.run("SECRET TOKEN")
请注意,您应该使用@client.command
装饰器而不是在消息中查找命令,这将非常有帮助。
请注意,我只是帮助了您的MyClient
类(或不使用它),您的代码可能包含错误。