我将网上的几个代码合二为一,用于我的discord bot,从所有功能(信息板,游戏状态,登录消息,彩虹角色,只有彩虹角色有效。没有错误出来,我不明白需要什么被改变。
import discord
from discord import utils
from discord.ext import commands
import asyncio
import random
import os
token = 'token'
serverid = id
client = commands.Bot( command_prefix = '.')
client.remove_command( 'help' )
PREFIX = "."
# Табличка с информацией
@client.command()
async def info(ctx):
print('Табличка с инфой работает')
embed=discord.Embed(title="ПИ-БОТ", description="Бот для ПИ-18(9)", color=0x0080ff)
embed.add_field(name="Cоздатель:", value="name", inline=True)
embed.add_field(name="Версия:", value="1", inline=True)
embed.set_thumbnail(url = 'url')
embed.set_footer(text="Бот")
await ctx.send(embed=embed)
# Игровой статус
@client.event
async def ready():
print( 'Игровой статус работает' )
await client.change_presence( status = discord.Status.online, activity = discord.Game( 'game' ) )
#Сообщение о том, что Юзер зашёл на сервер + выдача роли
@client.event
async def on_member_join( member ):
print('Приветственное сообщение работает')
emb = discord.Embed( description = f"**{member.mention}** зашел на сервер, добро пожаловать!", color = 0x0c0c0c )
role = discord.utils.get( member.guild.roles, id = id ) # Айди роли, которая будет выдаваться, когда человек зашёл на сервер
await member.add_roles( role )
channel = client.get_channel( id ) # Айди канала, куда будет писаться сообщение
await channel.send( embed = emb )
# Радужная роль
client = discord.Client()
colours = [discord.Color.dark_orange(),discord.Color.orange(),discord.Color.dark_gold(),discord.Color.gold(),discord.Color.dark_magenta(),discord.Color.magenta(),discord.Color.red(),discord.Color.dark_red(),discord.Color.blue(),discord.Color.dark_blue(),discord.Color.teal(),discord.Color.dark_teal(),discord.Color.green(),discord.Color.dark_green(),discord.Color.purple(),discord.Color.dark_purple()]
rainbowrolename = "name"
delay = 5
@client.event
async def rainbowrole(role):
for role in client.get_guild(serverid).roles:
if str(role) == str(rainbowrolename):
while not client.is_closed():
try:
await role.edit(color=random.choice(colours))
except Exception:
print("can't edit role, make sure the bot role is above the rainbow role and that is have the perms to edit roles")
pass
await asyncio.sleep(delay)
print('role with the name "' + rainbowrolename +'" not found')
print("creating the role...")
try:
await client.get_guild(serverid).create_role(reason="Created rainbow role", name=rainbowrolename)
print("role created!")
await asyncio.sleep(2)
client.loop.create_task(rainbowrole(rainbowrolename))
except Exception as e:
print("couldn't create the role. Make sure the bot have the perms to edit roles")
print(e)
pass
await asyncio.sleep(10)
client.loop.create_task(rainbowrole(rainbowrolename))
@client.event
async def on_ready():
client.loop.create_task(rainbowrole(rainbowrolename))
print('Радужная роль работает')
client.run(token)
至于状态和角色——由于装饰器的特殊性,只有角色起作用,
@discord.Client.event这个装饰器将客户端类中某个事件的方法替换为装饰器下的方法。所以事实证明状态码只是“消失”了。这两种方法都需要结合使用。对于其他问题,我想了解更多信息,因为代码看起来很有效。
感谢您帮助迭代器。我删除了“client = discord.Client()”,用@client.command() 替换了@client.event 状态,所有功能都正常工作。