作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Python 的新手,我的 Discord Bot 有一些问题没有得到解决。机器人应自动为首次加入服务器的用户分配角色。我可以成功设置自动角色。但是当用户加入服务器时,控制台出现如下错误信息。
Ignoring exception in on_member_join
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\site-packages\discord\client.py", line 307, in _run_event
yield from getattr(self, event)(*args, **kwargs)
File "E:/dev/DiscordBot/main.py", line 35, in on_member_join
await client.add_role(member, role)
File "C:\Program Files\Python36\lib\site-packages\discord\client.py", line 296, in __getattr__
raise AttributeError(msg.format(self.__class__, name))
AttributeError: '<class 'discord.client.Client'>' object has no attribute 'add_role'
C:\Program Files\Python36\lib\site-packages\discord\client.py:314: RuntimeWarning: coroutine 'get' was never awaited
pass
主要.py
import discord
from discord.ext import commands
import SECRETS
import STATICS
from commands import cmd_autorole
client = discord.Client()
commands = dict(autorole=cmd_autorole)
@client.event
async def on_ready():
print("Bot is ready!")
await client.change_presence(game=discord.Game(name="with humans"))
@client.event
async def on_message(message):
if message.content.startswith(STATICS.PREFIX):
invoke = message.content[len(STATICS.PREFIX):].split(" ")[0]
args = message.content.split(" ")[1:]
if commands.__contains__(invoke):
await commands.get(invoke).ex(args, message, client, invoke)
else:
await client.send_message(message.channel, embed=discord.Embed(color=discord.Color.red(), description=("The command `%s` is not valid!" % invoke)))
@client.event
async def on_member_join(member):
# await client.send_message(member, "**Hello %s,**\n\nwelcome on Discord-Server __**%s**__!\nPlease look first at the main channel %s .\n\nHave Fun!" % (member.name, member.server.name, discord.utils.get(member.server.channels, id="532425431526277135").mention))
role = cmd_autorole.get(member.server)
if not role is None:
await client.add_role(member, role)
client.run(SECRETS.TOKEN)
cmd_autorole.py
import os
from os import path
import discord
async def error(content, channel, client):
await client.send_message(channel, embed=discord.Embed(color=discord.Color.red(), description=content))
async def get(server):
f = "SETTINGS/" + server.id + "/autorole"
if path.isfile(f):
with open(f) as f:
return discord.utils.get(server.roles, id=f.read())
else:
return None
async def savefile(id, server):
if not path.isdir("SETTINGS/" + server.id):
os.makedirs("SETTINGS/" + server.id)
with open("SETTINGS/" + server.id + "/autorole", "w") as f:
f.write(id)
f.close()
async def ex(args, message, client, invoke):
print(args)
if len(args) > 0:
rolename = args.__str__()[1:-1].replace(",", "").replace("'", "")
role = discord.utils.get(message.server.roles, name=rolename)
if role is None:
await error("Please enter a valid role existing on this server!", message.channel, client)
else:
try:
await savefile(role.id, message.server)
await client.send_message(message.channel, embed=discord.Embed(color=discord.Color.green(), description=("Autorole has been successfully set up for the Role `% s`." % role.name)))
except Exception:
await error("Something went wrong while saving autorole!", message.channel, client)
raise Exception
最佳答案
在您的 cmd_autorole.py
文件中,get()
函数是异步的,但您还没有在主文件中等待它 .您必须编写 role = await cmd_autorole.get(member.server)
而不是 role = cmd_autorole.get(member.server)
。
关于python - discord bot autorole——在 _run_event yield from getattr(self, event)(*args, **kwargs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54319042/
我是 JS 的新手,为了学习我决定为 Discord 制作一个机器人,我学到了很多东西并且正在继续学习。我有一个“autorole”的想法。我知道传统的做法。 bot.on('guildMemberA
所以我试图用 Discord JS 做一个 Autorole 函数,但问题是我出现了一个大错误,我不知道为什么。这是我使用的代码: client.on('guildMemberAdd', member
我是 Python 的新手,我的 Discord Bot 有一些问题没有得到解决。机器人应自动为首次加入服务器的用户分配角色。我可以成功设置自动角色。但是当用户加入服务器时,控制台出现如下错误信息。
我是一名优秀的程序员,十分优秀!