所以,最近我一直在用python開發一個discord bot,當你在discord服務器上說話時,它可以讓你升級,許多流行的bot,比如Carl Bot和MEE6都有這樣的功能,我覺得這很有趣;所以我想嘗試重新創建它。該機器人作業得非常好,但它確實有一些我想嘗試并修復的警告,因為沒有辦法檢查你的水平或獲得服務器中前 10 人的排行榜。但是,我想在這里找到并解決的問題是您可以發送垃圾郵件;沒有意義的訊息和許多只需要一兩個的訊息。那么,我該怎么做,如何防止我的系統中的垃圾郵件創建它。任何幫助,將不勝感激!
from discord.ext import commands
import json
import discord
import os
import random
import time
client = commands.Bot(command_prefix = "!")
#On Ready Event.
@client.event
async def on_ready():
print("Bot Ready.")
time.sleep(1)
print("Logged In As: {0.user}".format(client))
#Function For Getting A Users Information And Level Them Up.
@client.event
async def on_member_join(member):
with open("users.json", "r") as f:
users = json.load(f)
await update_data(users, member)
with open("users.json", "w") as f:
json.dump(users, f)
#Function For Sending Messages.
@client.event
async def on_message(message):
with open("users.json", "r") as f:
users = json.load(f)
await update_data(users, message.author)
await add_experience(users, message.author, 5)
await level_up(users, message.author, message.channel)
with open("users.json", "w") as f:
json.dump(users, f)
async def update_data(users, user):
if not str(user.id) in users:
users[str(user.id)] = {}
users[str(user.id)]["experience"] = 0
users[str(user.id)]["level"] = 1
async def add_experience(users, user, exprience):
users[str(user.id)]["experience"] = exprience
async def level_up(users, user, channel):
experience = users[str(user.id)]["experience"]
level_start = users[str(user.id)]["level"]
level_end = int(experience ** (1/4))
if level_start < level_end:
await channel.send(f"{user.mention} Has Leveled Up! They Have Leveled Up To Level {level_end}!")
users[str(user.id)]["level"] = level_end
client.run(os.getenv("Token"))
client.run(os.environ["Token"])
uj5u.com熱心網友回復:
確保成員不能發送垃圾郵件并仍然獲得信用的方法是請求某種形式的計時系統。為此,您需要能夠存盤資料。但是,您可能不需要持久資料存盤并且可以使用字典。
在此示例中,我以秒為單位存盤成員的最后一條訊息,time.time()并檢查他們最后記錄的訊息時間戳是否小于 60 秒。這將只允許成員一次獲得他們的訊息分鐘數。此外,請注意,我只在收到信用后更新會員的最后一條訊息。這確保了他們仍然可以在一分鐘內發送多條訊息,并且仍然會因間隔一分鐘的訊息而獲得信用。
from time import time
member_messages = {}
@client.event
async def on_message(message):
global member_messages
if message.author.id not in member_messages:
member_messages[message.author.id] = 0
current_time = time()
last_message_requirement = current_time - 60 # Change this cooldown (in seconds) however you like
if member_messages[message.author.id] <= last_message_requirement:
with open("users.json", "r") as f:
users = json.load(f)
await update_data(users, message.author)
await add_experience(users, message.author, 5)
await level_up(users, message.author, message.channel)
with open("users.json", "w") as f:
json.dump(users, f)
member_messages[message.author.id] = current_time
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/482636.html
