当前位置: 首页 > 知识库问答 >
问题:

discord.py多个服务器的欢迎消息

东郭昌胤
2023-03-14

我正在制作一个不和谐的机器人,我计划在多个服务器上运行。每台服务器都有一个不同的欢迎频道名称以及所有这些。我制作了欢迎消息,并尝试让机器人在一个名为“欢迎”的频道中发布消息,这将解决这个问题,但没有成功。我曾考虑创建一个数据库,将服务器所有者发送给bot的通道id保存在服务器名称/id下。触发bot时,会将服务器id与数据库中的id匹配,然后获取链接到服务器id的通道id。但这需要大量SQL或PostgreSQL编码,我必须学习如何获取bot要将服务器id和通道id保存到数据库中,如何使bot与服务器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。

共有1个答案

姬高扬
2023-03-14

如果bot的规模要小得多,比如说只有几个服务器,那么我会说使用json文件保存字典不是一个坏主意。

当服务器加入服务器时,您可以将顶部文本频道的id保存为默认值,并允许他们更改使用命令的频道,这可以通过on\u guild\u 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文件,并将{}添加到该文件中

 类似资料:
  • 我正在写欢迎消息代码,但是每当我运行机器人和成员连接时,嵌入就不会出现,也不会显示任何错误。我该怎么修?

  • 我有一个相当不错的机器人,我计划很快推出。它被称为版主,它应该是一个完美的版主机器人,这样服务器就不再需要真正的版主了。因此,我希望它在加入服务器时发送欢迎消息,但由于所有服务器都有不同的频道名称和频道,因此我无法获得通用的频道名称来发送欢迎消息。 这就是我现在看到的,正如您所看到的,它找到了一个名为general的频道,并将欢迎嵌入消息发送到general频道。但是,由于不是每台服务器都有一个通

  • 我想我的机器人发送消息时,有人加入服务器(也提到他们) 我唯一想改变的是,这应该显示在一般渠道(它现在在终端打印它),而不是只显示人的名字,我希望它提到他们。谢谢你的帮助!

  • 本文向大家介绍怎么禁用 Ubuntu 服务器中终端欢迎消息中的广告,包括了怎么禁用 Ubuntu 服务器中终端欢迎消息中的广告的使用技巧和注意事项,需要的朋友参考一下 如果你正在使用最新的 Ubuntu 服务器版本,你可能已经注意到欢迎消息中有一些与 Ubuntu 服务器平台无关的促销链接。你可能已经知道 MOTD,即 Message Of The Day 的开头首字母,在 Linux 系统每次登

  • 该站点的目标是成为 Jekyll 的全面指南。包括一些内容如:搭建和运行你的站点、创建以及管理内容、定制站点的展现和外观、在不同的环境中发布、以及参与到 Jekyll 将来的开发的一些建议。 Jekyll 究竟是什么? Jekyll 是一个简单的博客形态的静态站点生产机器。它有一个模版目录,其中包含原始文本格式的文档,通过一个转换器(如 Markdown)和我们的 Liquid 渲染器转化成一个完

  • 欢迎来到 Libra 开发者站点! Libra 的使命是建立一套简单的全球货币和金融基础设施,为数十亿人服务。 The world truly needs a reliable digital currency and infrastructure that together can deliver on the promise of “the internet of money.” Securi