制作调平系统时出错 discord.py
Posted
技术标签:
【中文标题】制作调平系统时出错 discord.py【英文标题】:Error in making a leveling system discord.py 【发布时间】:2021-09-02 06:54:39 【问题描述】:我正在尝试在我的 discord.py 机器人中制作一个调平系统。 我正在使用 MongoDB atlas 作为数据库。
这是我的代码。
import os
import discord
from discord.ext import commands
import pymongo
from pymongo import MongoClient
class Levelling(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.Cog.listener()
async def on_ready(self):
print('Levelling is Ready')
@commands.Cog.listener()
async def on_message(self, ctx):
cluster = pymongo.MongoClient('Link here')
db = cluster["levels"]
collection = db["Level"]
author_id = ctx.author.id
guild_id = ctx.guild.id
user_id = '_id': author_id
if ctx.author == bot.user: ### Checks if it is a bot command (I Think so)
return
if ctx.author.bot: ### Avoids bots from Leveling up. (I Think so)
return
if collection.count_documents( == 0):
user_info = 'id': author_id, 'GuildId': guild_id, 'Level': 1, 'XP': 0
collection.insert_one(user_info)
await ctx.send('user has been Logged in.')
我的错误:
Ignoring exception in on_message
Traceback (most recent call last):
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "/home/runner/Shiny-disc-bot/levelling.py", line 30, in on_message
if ctx.author == bot.user:
NameError: name 'bot' is not defined
基本上,它表示未定义机器人。但我已经在 main.py 中定义了它。
我的 main.py:
#------importing packages
import keep_alive
import os
import discord
from discord.ext import commands
bot = commands.Bot(command_prefix='-')
bot.remove_command('help')
my_token = os.environ['Token']
#------When bot is online
@bot.event
async def on_ready():
#status
#playing game status
await bot.change_presence(activity = discord.Game(name = f'On len(bot.guilds) Servers | -help'))
print('Bot is Ready')
initial_extensions = ['fun', 'help', 'math1', 'mod', 'levelling']
if __name__ == '__main__':
for extension in initial_extensions:
bot.load_extension(extension)
#ping latency....
@bot.command()
async def ping(ctx):
await ctx.send(f'Pong\nround(bot.latency * 1000)ms')
#------Running the bot
keep_alive.keep_alive()
bot.run(my_token)
如果你有任何关于如何使用 mongodb 制作练级系统的教程,请分享给我。
我正在关注 This Tutorial
【问题讨论】:
if ctx.author == bot.user:
-> 应该是self.bot.user
【参考方案1】:
似乎无法连接到数据库。
您可以将if ctx.author == bot.user:
留在外面,这将检查作者是否是机器人本身。 if ctx.author.bot
就够了。
【讨论】:
【参考方案2】:忽略 on_message 中的异常
回溯(最近一次通话最后):
_run_event 中的文件“/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py”,第 343 行
等待 coro(*args, **kwargs)
文件“/home/runner/Shiny-disc-bot/levelling.py”,第 36 行,on_message
如果 collection.count_documents( == 0):
文件“/opt/virtualenvs/python3/lib/python3.8/site-packages/pymongo/collection.py”,第 1785 行,在 count_documents
返回 self.__database.client._retryable_read(
_retryable_read 中的文件“/opt/virtualenvs/python3/lib/python3.8/site-packages/pymongo/mongo_client.py”,第 1460 行
服务器 = self._select_server(
_select_server 中的文件“/opt/virtualenvs/python3/lib/python3.8/site-packages/pymongo/mongo_client.py”,第 1278 行
服务器 = topology.select_server(server_selector)
文件“/opt/virtualenvs/python3/lib/python3.8/site-packages/pymongo/topology.py”,第 241 行,在 select_server
返回随机选择(self.select_servers(选择器,
文件“/opt/virtualenvs/python3/lib/python3.8/site-packages/pymongo/topology.py”,第 199 行,在 select_servers
server_descriptions = self._select_servers_loop(
_select_servers_loop 中的文件“/opt/virtualenvs/python3/lib/python3.8/site-packages/pymongo/topology.py”,第 215 行
引发 ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: cluster0.h9fmz.mongodb.net:27017: [Errno -5] No address associated with hostname, Timeout: 30s, Topology Description:
这是我在执行 self.bot.user 后得到的错误
【讨论】:
这与您的原始问题甚至没有关系,请随时提出新问题。以上是关于制作调平系统时出错 discord.py的主要内容,如果未能解决你的问题,请参考以下文章
带有 quick.db 的 discord.js 手动调平系统
我正在尝试在基于 QB64 Txt 的冒险中创建一个调平系统
Discord Bot Maker - MySQL 调平系统或 Discord.js - MySQL 调平系统