Python - Discord.py - 防止在 on_message 函数中多次重复使用相同的代码
Python - Discord.py - Prevent reuse of same code multiple times in on_message function
我使用 Discord.py 创建了一个简单的机器人,它输出文本文件的内容,其中包含抓取的体育赛事和频道数据(抓取的数据是从我创建的其他小脚本接收的,但未包含在此处) .
discordbot.py
import discord
import os
from dotenv import load_dotenv
client = discord.Client()
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')
client = discord.Client()
@client.event
async def on_ready():
for guild in client.guilds:
if guild.name == GUILD:
break
print(
f'{client.user} is connected to the following guild:\n'
f'{guild.name}(id: {guild.id})'
)
@client.event
async def on_message(message):
id = client.get_guild(73194****229982)
if str(message.channel) == "boxingmma":
if message.content.find("!boxing") != -1:
with open('/home/brendan/Desktop/boxingtest.txt', 'r') as file:
msg = file.read(2000).strip()
while len(msg) > 0:
await message.author.send(msg)
msg = file.read(2000).strip()
if str(message.channel) == "football":
if message.content.find("!english") != -1:
with open('/home/brendan/Desktop/splittest.txt', 'r') as file:
msg = file.read(2000).strip()
while len(msg) > 0:
await message.author.send(msg)
msg = file.read(2000).strip()
if str(message.channel) == "football":
if message.content.find("!scottish") != -1:
with open('/home/brendan/Desktop/testing2.txt', 'r') as file:
msg = file.read(2000).strip()
while len(msg) > 0:
await message.author.send(msg)
msg = file.read(2000).strip()
client.run("NzMxOTQ4Mzk5NzY2NjY3NDg2.XwuPsw.iN****-e2yDnRS_uWqff43Thvqw")
机器人 运行 正常,当命令在相关的不和谐频道上 运行 时,将向向机器人发送请求的用户发送 DM。这段代码最大的问题是 on_message 函数中的重复代码。三个不同的双 if 语句的唯一区别是通道名称,例如足球或拳击,命令例如!scottish, !english, !boxing 和抓取数据的文件路径。
我很好奇是否有人知道这可以改进或重复使用重复代码的方法?我试图将这些作为位置参数从另一个函数传递,例如:
def callall():
on_message(channel="football", command="!english", filepath="/home/brendan/Desktop/test.txt")
但在研究了这个之后似乎无法将参数传递给 discord.py
中的 on_message
对于如何恢复重复代码或改进一般程序流程的任何建议,我们将不胜感激
谢谢大家
你可以有一个字典作为
dict = {"boxingmma":"/home/brendan/Desktop/boxingtest.txt", "football":"/home/brendan/Desktop/splittest.txt", "football1":"/home/brendan/Desktop/testing2.txt"}
for key, value in dict:
if str(message.channel) == key:
if message.content.find("!boxing") != -1:
with open(value, 'r') as file:
msg = file.read(2000).strip()
while len(msg) > 0:
await message.author.send(msg)
msg = file.read(2000).strip()
对于第三个值,我将 football 设为 football1,因为键不能重复。
我使用 Discord.py 创建了一个简单的机器人,它输出文本文件的内容,其中包含抓取的体育赛事和频道数据(抓取的数据是从我创建的其他小脚本接收的,但未包含在此处) .
discordbot.py
import discord
import os
from dotenv import load_dotenv
client = discord.Client()
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')
client = discord.Client()
@client.event
async def on_ready():
for guild in client.guilds:
if guild.name == GUILD:
break
print(
f'{client.user} is connected to the following guild:\n'
f'{guild.name}(id: {guild.id})'
)
@client.event
async def on_message(message):
id = client.get_guild(73194****229982)
if str(message.channel) == "boxingmma":
if message.content.find("!boxing") != -1:
with open('/home/brendan/Desktop/boxingtest.txt', 'r') as file:
msg = file.read(2000).strip()
while len(msg) > 0:
await message.author.send(msg)
msg = file.read(2000).strip()
if str(message.channel) == "football":
if message.content.find("!english") != -1:
with open('/home/brendan/Desktop/splittest.txt', 'r') as file:
msg = file.read(2000).strip()
while len(msg) > 0:
await message.author.send(msg)
msg = file.read(2000).strip()
if str(message.channel) == "football":
if message.content.find("!scottish") != -1:
with open('/home/brendan/Desktop/testing2.txt', 'r') as file:
msg = file.read(2000).strip()
while len(msg) > 0:
await message.author.send(msg)
msg = file.read(2000).strip()
client.run("NzMxOTQ4Mzk5NzY2NjY3NDg2.XwuPsw.iN****-e2yDnRS_uWqff43Thvqw")
机器人 运行 正常,当命令在相关的不和谐频道上 运行 时,将向向机器人发送请求的用户发送 DM。这段代码最大的问题是 on_message 函数中的重复代码。三个不同的双 if 语句的唯一区别是通道名称,例如足球或拳击,命令例如!scottish, !english, !boxing 和抓取数据的文件路径。
我很好奇是否有人知道这可以改进或重复使用重复代码的方法?我试图将这些作为位置参数从另一个函数传递,例如:
def callall():
on_message(channel="football", command="!english", filepath="/home/brendan/Desktop/test.txt")
但在研究了这个之后似乎无法将参数传递给 discord.py
中的 on_message对于如何恢复重复代码或改进一般程序流程的任何建议,我们将不胜感激
谢谢大家
你可以有一个字典作为
dict = {"boxingmma":"/home/brendan/Desktop/boxingtest.txt", "football":"/home/brendan/Desktop/splittest.txt", "football1":"/home/brendan/Desktop/testing2.txt"}
for key, value in dict:
if str(message.channel) == key:
if message.content.find("!boxing") != -1:
with open(value, 'r') as file:
msg = file.read(2000).strip()
while len(msg) > 0:
await message.author.send(msg)
msg = file.read(2000).strip()
对于第三个值,我将 football 设为 football1,因为键不能重复。