Могу ли я использовать классы вместо всех этих операторов if? Discord python бот - PullRequest
0 голосов
/ 29 марта 2020

У меня есть вопрос о классах / операторах if.

У меня есть этот код с множеством if операторов, которые выглядят так:

if message.content.lower().startswith("test"):
        time.sleep(1)
        await message.add_reaction(gEmoji)
        await message.add_reaction(aEmoji)
        await message.add_reaction(yEmoji)

Но все для разных слов и Emojis.

Это моя короткая версия моего кода:

import discord
import random
from discord.ext.commands import Bot
from discord.ext import commands
import sys
import os
import cogs
import config
import logging
import asyncio
import datetime
import time

client = discord.Client()
client = commands.Bot(command_prefix='*')

gEmoji = "?"
aEmoji = "?"
yEmoji = "?"

hEmoji = "?"
oEmoji = "?"
tEmoji = "?"

@client.event
async def on_message(message):
    if message.content.lower().startswith("test"):
        time.sleep(1)
        await message.add_reaction(gEmoji)
        await message.add_reaction(aEmoji)
        await message.add_reaction(yEmoji)

    if message.content.startswith("hot"):
        time.sleep(1)
        await message.add_reaction(hEmoji)
        await message.add_reaction(oEmoji)
        await message.add_reaction(tEmoji)


client.run("TOKEN/CENSORED")

В моей версии этого кода у меня ~ 200 строк кода и ~ 150 из них только if заявления.

Поскольку я новичок в Python и только начал использовать классы, мне было интересно, могу ли я как-то изменить операторы if, чтобы использовать классы, чтобы получить более красивый код и более легкий для понимания код .

1 Ответ

1 голос
/ 29 марта 2020

Вы, вероятно, могли бы использовать классы, если бы захотели sh, но для меня это мало что значит. Имеет смысл использовать словари и списки:

words = { "gay": [ "?", "?", "?" ],
          "hot": [ "?", "?", "?" ]
          # add other words as necessary
        }

@client.event
async def on_message(message):
    for word, emojis in words.items():
        if message.content.lower().startswith(word):
            time.sleep(1)
            for emoji in emojis:
                await message.add_reaction(emoji)
            break

Вот и вся функция, нет необходимости в сотнях if с. Примечание : я добавил break для выхода из внешнего for l oop в предположении, что ни одно слово не является префиксом другого, поэтому, например, в вашем словаре нет "более горячего", если есть " жарко "в нем. Если это предположение неверно, break следует удалить и слова должны быть отсортированы в первую очередь.

...