我正在制作一个计划在多台服务器中使用的不和谐机器人。每个服务器将具有不同的欢迎频道名称以及所有其他名称。我发出了欢迎消息,并尝试使机器人在称为“欢迎”的频道中发布该消息,这可以解决此问题,但不起作用。我考虑过要创建一个数据库,该数据库在服务器名称/ ID下保存服务器所有者发送给机器人的通道ID。机器人在触发时会将服务器ID与数据库中的ID匹配,然后获取链接到服务器ID的通道ID。但这将需要大量的SQL或PostgreSQL编码,我将不得不学习如何使机器人将服务器ID和通道ID保存到数据库中,如何使机器人与服务器ID匹配然后获取通道ID。并将其发布到服务器。没有关于不合格的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。
答案 0 :(得分:0)
如果该机器人规模较小,仅说几台服务器,那么我会说使用json文件保存字典并不是一个坏主意。
当服务器加入服务器时,您可以将顶部文本通道的ID保存为默认值,并让他们更改要使用命令的通道,这可以通过on_guild_join
事件来完成
import json
#sets value in json to guild id upon the bot joining the guild
@client.event
async def on_guild_join(guild):
#loads json file to dictionary
with open("filename.json", "r") as f:
guildInfo = json.load(f)
guildInfo[guild.id] = guild.text_channels[0] #sets key to guilds id and value to top textchannel
#writes dictionary to json file
with open("filename.json", "w" as f:
json.dump(guildInfo, f)
#allows server members to set channel for welcome messages to send to
@client.command()
async def welcomeMessage(ctx):
with open("filename.json", "r") as f:
guildInfo = json.load(f)
guildInfo[ctx.message.guild.id] = ctx.message.channel.id #sets channel to send message to as the channel the command was sent to
with open("filename.json", "w") as f:
json.dump(guildInfo, f)
然后只用
with open("filename.json", "r"):
guildInfo = json.load(f)
channnel = guildInfo[ctx.message.guild.id]
获取将消息发送至和的渠道
channel.send(embed=embed)
发送消息
在运行它之前,请确保在同一目录中有一个空的json文件,并将{}
添加到该文件中