【问题标题】:Python how to forward messages from serverPython如何从服务器转发消息
【发布时间】:2018-09-14 02:51:58
【问题描述】:

您好,我有一个旧的不和谐服务器,我们现在不使用它。我们创建了一个新服务器并将所有成员移到那里,但旧服务器中仍然有一些成员。那么是否可以将所有消息从服务器 A 转发到服务器 B 到特定通道。

更新: 我的意思是当服务器 A 收到一条消息时,它应该被发送到服务器 B 到一个特定的频道。 bot 在两个服务器中,因此我可以准确地转发所有传入的消息。

机器人代码

token = "xxxxxxxxxxxxx"
prefix = "!"

import discord
from discord.ext import commands
from discord.ext.commands import Bot

bot = commands.Bot(command_prefix=prefix)
bot.remove_command("help")

@bot.event
async def on_ready():
    print('\nLogged in as')
    print("Bot Name: " + bot.user.name)
    print("Bot User ID: " + bot.user.id)

old_server = bot.get_server('xxxxxxxxxxxxx')
new_channel = bot.get_channel('xxxxxxxxxxxxx')

@bot.event
async def on_message(message):
    message.content = message.content.lower()

    if message.server == old_server:
        await bot.send_message(new_channel, message.content)

    await bot.process_commands(message)

bot.run(token)

【问题讨论】:

  • 你可以在这里查看link
  • 在那个链接中,我看不到任何来自 d 消息正在发送到哪个服务器的内容?那是消息还是电子邮件?
  • “所有消息”是什么意思?新消息、所有旧消息、每个频道的最后 100 条消息等
  • @Demotry 你能更新你的问题吗?那些信息是什么?采用什么格式?
  • @PatrickHaugh 我的意思是当服务器 A 收到一条消息时,它应该被发送到服务器 B 到一个特定的频道。 bot 在两个服务器中,因此我可以准确地转发所有传入的消息。

标签: python-3.x discord.py


【解决方案1】:

您可以使用on_message 事件来检查消息何时发送到旧服务器,并让机器人将消息发布到新服务器。

下面是示例代码,其中机器人将检查旧服务器何时收到消息,然后将相同的消息发布到新服务器上的指定频道。

from discord.ext import commands

client = commands.Bot(command_prefix='!')

@client.event
async def on_message(message):
    old_server = client.get_server('old_server_id')
    new_channel = client.get_channel('new_channel_id')

    if message.server == old_server:
        await client.send_message(new_channel, message.content + ' - ' + message.author.nick)

client.run('token')

【讨论】:

  • 是添加了旧的服务器 ID 和新的服务器通道 ID。
  • 如果我在顶部添加这两条线 old_server = client.get_server('old_server_id') new_channel = client.get_channel('new_channel_id') 可以吗?或者我需要在 on_message 附近添加它?
  • 在定义client之后,如果靠近顶部应该没问题。如果您按原样运行示例代码(替换必要的信息),它是否成功发布消息?
  • 我在上面的问题中更新了我的完整代码,但机器人仍然没有在新服务器中发布消息。
  • 似乎在事件或命令之外使用client.get_serverclient.get_channel 会使它们返回None。在on_message 事件中移动代码有效。更新了答案。
猜你喜欢
  • 2020-10-30
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 2019-07-09
  • 2014-09-29
  • 2019-01-23
  • 1970-01-01
  • 2016-09-10
相关资源
最近更新 更多