当我的服务有更新时如何发送Messenger到discord

问题描述 投票:0回答:1

我有一项服务,当我的服务有更新时,如何自动向 Discord 发送消息? 我试着喜欢这样

import discord
import asyncio
from threading import Thread
from discord.ext import commands

class DiscordBot:
    def __init__(self):
        self.token = "token"
        self.imageFolder = "folder"
        intents = discord.Intents.default()
        intents.message_content = True
        intents.members = True

        self.client = discord.Client(intents=intents)
        self.bot = commands.Bot(command_prefix="!", intents=intents,description="Một con bot Ree đến từ stock-chat")
        self.loop = asyncio.get_event_loop()
        self.loop.create_task(self.client.start(self.token))
        # self.thread = Thread(target=self.loop.run_forever)
        # self.thread.start()



    async def sendMessage(self, content_message):
        for guild in self.bot.guilds:
            for member in guild.members:
                    if not member.bot:
                        await member.send("Welcome!")

    def runbot(self):
        self.bot.run(self.token,reconnect=True)
        

bot_discord = DiscordBot()
bot_discord.runbot()
bot_discord.sendMessage("Welcome!")

但是我在调用runbot后无法调用sendMessage

python discord discord.py
1个回答
0
投票

bot.run()
之后无法执行某些操作,因为它正在阻塞呼叫。 但是,您可以从异步函数
sendMessage()
 事件调用 
on_ready

async def on_ready(self) -> None:
    await sendMessage()

但这里值得一提的是,

on_ready
可能会执行多次。为了防止下次触发,可以创建一个标志
was_ready_once
:

class DiscordBot:
    def __init__(self):
        self.token = "token"
        self.imageFolder = "folder"
        intents = discord.Intents.default()
        intents.message_content = True
        intents.members = True

        self.client = discord.Client(intents=intents)
        self.bot = commands.Bot(command_prefix="!", intents=intents, description="Một con bot Ree đến từ stock-chat")
        self.loop = asyncio.get_event_loop()
        self.loop.create_task(self.client.start(self.token))
        self._was_ready_one = False  # create flag
        self._add_events()  # add event handlers

    async def sendMessage(self, content_message):
        for guild in self.bot.guilds:
            for member in guild.members:
                if not member.bot:
                    await member.send("Welcome!")

    def _add_events(self):  # function to add event handler
        @self.bot.event
        async def on_ready():
            if not self._was_ready_once:  # check if bot was ready before
                self._was_ready_once = True
                await self.sendMessage("content")

    def runbot(self):
        self.bot.run(self.token, reconnect=True)


bot_discord = DiscordBot()
bot_discord.runbot()
© www.soinside.com 2019 - 2024. All rights reserved.