【发布时间】:2020-10-21 07:59:54
【问题描述】:
我正在制作一个我计划在多个服务器中使用的不和谐机器人。每个服务器都有不同的欢迎频道名称等等。我发出了欢迎消息,并尝试让机器人在一个名为“欢迎”的频道中发布消息,这可以解决这个问题,但没有奏效。我考虑过创建一个数据库来保存服务器所有者在服务器名称/ID 下发送给机器人的频道 ID。机器人在触发时会将服务器 ID 与数据库中的一个匹配,然后获取链接到服务器 ID 的频道 ID。但这将是 SQL 或 PostgreSQL 中的大量编码,我必须学习如何让机器人将服务器 ID 和频道 ID 保存到数据库,如何让机器人匹配服务器 ID,然后获取频道 ID并将消息发布到服务器。没有关于 discord py 机器人和为不同服务器制作欢迎消息的文档。我想知道是否有更好的方法可以做到这一点,我该怎么做?
到目前为止我对欢迎信息的了解。
import discord
import logging
import asyncio
import random
import time
import tweepy, discord
from discord.ext import commands
from discord.ext.commands import bot
#File Imports
from config import *
client = commands.Bot(command_prefix='sec.')
# logger = logging.getLogger('discord')
# logger.setLevel(logging.DEBUG)
# handler = logging.FileHandler(filename='discord.log', encoding='utf-8', mode='w')
# handler.setFormatter(logging.Formatter('%(name)s: %(message)s'))
# logger.addHandler(handler)
@client.event
async def on_ready():
print('Logged in as %s' % client.user.name)
while True:
presence = random.choice(['sec.help', 'Defending Servers'])
activity = discord.Game(name=(presence))
await client.change_presence(status=discord.Status.online, activity=activity)
await asyncio.sleep(7)
client.remove_command('help')
@client.event
async def on_member_join(member):
# Adds role to user
# role = discord.utils.get(member.server.roles, name='Member')
# await client.add_roles(member, role)
# Random embed color
range = [255,0,0]
rand = random.shuffle(range)
# Welcomes User
embed = discord.Embed(title="{}'s info".format(member.name), description="Welcome too {}".format(member.guild.name))
embed.add_field(name="Name", value=member.name, inline=True)
embed.add_field(name="ID", value=member.id, inline=True)
embed.add_field(name="Status", value=member.status, inline=True)
embed.add_field(name="Roles", value=member.top_role)
embed.add_field(name="Joined", value=member.joined_at)
embed.add_field(name="Created", value=member.created_at)
embed.set_thumbnail(url=member.avatar_url)
inlul = client.get_channel(CHANNEL_ID)
await inlul.send(inlul, embed=embed)
如果您找到任何关于此的文档,我很乐意阅读。我能找到的只是基本的机器人,并且你输入了频道 ID。
【问题讨论】:
-
您可以创建一个字典,其中
guild.id为键,channel.id为值。这样每次触发on_member_join时,您都可以从member对象(member.guild.id)获取公会ID,然后使用bot.fetch_channel(channel-id)获取频道。
标签: python-3.x discord discord.py