首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python不和谐Bot重启行为?

Python不和谐Bot重启行为?
EN

Stack Overflow用户
提问于 2021-01-29 18:08:53
回答 2查看 215关注 0票数 0

我们和我的一个朋友一起在python中创建了一个简单的不和谐机器人,首先让我解释一下它是如何工作的:

我们创建了366个不同的用户名,一年中每一天都有一个。每天早上0:01分,机器人应该自动发布一条消息:

  • 当前日期(日、月、年)和我们与之关联的用户名
  • 机器人还应该用

的用户名重命名自己的用户名。

这是我们制定的代码:

代码语言:javascript
运行
复制
#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import discord
from discord.ext import commands
from dotenv import load_dotenv
from datetime import datetime
load_dotenv()

TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()
channel = client.get_channel(CHANNELID)

bissextileSpec = datetime.today().strftime('%m-%d') # To handle bissextile years

nickFile = open("nicknames.txt", "r")
nickList = nickFile.readlines()
dayNumber = datetime.now().timetuple().tm_yday

# We also made special dates

if bissextileSpec == '06-01' :
    nickOfTheDay = 'SpecialNick1'
elif bissextileSpec == '07-14' :
    nickOfTheDay = 'SpecialNick2'
elif bissextileSpec == '30-12' :
    nickOfTheDay = 'SpecialNick3'
elif bissextileSpec == '17-06' :
    nickOfTheDay = 'SpecialNick4'
elif bissextileSpec == '05-04' :
    nickOfTheDay = 'SpecialNick5'
else :
    nickOfTheDay = nickList[dayNumber - 1]

await channel.send('MSG CONTENT', nickOfTheDay, 'MSG CONTENT')
await client.user.edit(username=nickOfTheDay)

我们对蟒蛇有一点了解,但我们并不真正知道机器人是如何运作的:

我们不太清楚如何指示它每天午夜自动投递:我们想到了一个with循环,它的末端有一个睡眠(50),但是:它将如何处理危险的VPS重新启动?,如果vps在睡眠中重新启动,它会重置它并将下一个发布时间移到0:00以后吗?

另一方面,如果我们不使用循环,但是如果我们每天午夜使用Linux中的CRON系统来检查和启动脚本,这是否意味着bot将在不和谐的情况下显示脱机23h59/24,并仅停留在网上发布消息? =>我们希望以后再添加几个特性,所以我们需要该机器人运行24/24。

同样,如果我们在代码中做错了什么,不要犹豫地指出它(͡°͜ʖ͡°)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-30 01:03:36

Łukasz的代码有一个微小的缺陷,未来的变量被错误地初始化了,但是其他的都在相应地工作!这应该能起作用:

代码语言:javascript
运行
复制
import asyncio
from discord.ext import tasks
from datetime import datetime

@tasks.loop(hours=24)
async def change_nickname(guild):
    nick = ""
    await guild.me.edit(nick=nick)

@change_nickname.before_loop
async def before_change_nickname():
    hour, minute = 0, 0
    now = datetime.now()
    future = datetime(now.year, now.month, now.day + 1, hour, minute)
    delta = (future - now).seconds
    await asyncio.sleep(delta)
票数 0
EN

Stack Overflow用户

发布于 2021-01-29 18:35:05

您可以创建一个循环,每24小时迭代一次,并更改bot的昵称,您可以通过一些简单的数学和睡眠来获得到午夜的秒数。

代码语言:javascript
运行
复制
import asyncio
from discord.ext import tasks
from datetime import datetime

@tasks.loop(hours=24)
async def change_nickname(guild):
    """Loops every 24 hours and changes the bots nick"""
    nick = "" # Get the nick of the corresponding day
    await guild.me.edit(nick=nick)


@change_nickname.before_loop
async def before_change_nickname(guild):
    """Delays the `change_nickname` loop to start at 00:00"""
    hour, minute = 0, 0
    
    now = datetime.now()
    future = datetime(now.year, now.month, now.day + 1, now.month, now.day, hour, minute)

    delta = (future - now).seconds
    await asyncio.sleep(delta)

要启动它,您需要传递一个discord.Guild实例(应该更改昵称的主公会)

代码语言:javascript
运行
复制
change_nickname.start(guild) # You can start it in the `on_ready` event or some command or in the global scope, don't forget to pass the guild instance

不管机器人启动了什么时间,循环都会在每天00:00改变机器人尼克。

参考资料:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65959647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档