Установка уникальных ключевых слов для каждого человека через бот-дискорд - PullRequest
0 голосов
/ 21 января 2019

В настоящее время я пытаюсь создать бота, который позволял бы участникам устанавливать конкретные ключевые слова, которые бот затем проверяет на сервере (в течение определенного периода времени).Если бот обнаруживает это ключевое слово в сообщении (только через другого бота / веб-крючка), он предупреждает пользователя, который установил это ключевое слово.

По сути, я хочу сделать что-то вроде этого сценария:

Member 1 --->

! Setkeyword новая ссылка

(затем бот устанавливаетключевые слова для члена 1, в частности, «новая ссылка»)

! listkeywords

(бот возвращает слово / фразу «новая ссылка»)


Участник 2 -->

! Setkeyword new shoe

(тогда бот устанавливает ключевые слова для члена 1 именно как "new shoe")

! Listkeywords

(бот возвращает слово / фразу «новая обувь»)

Лучшее, что я нашел, - это использование словаря и списка.Ключом к словарю был идентификатор пользователя участника, который устанавливает ключевое слово, а список содержит ключевое слово.

Вариант 1: dictt = {}

@bot.command()
async def add(ctx,keyword):
    listy = []
    listy.append(keyword)
    dictt[ctx.author.id] = listy

Вариант 2:

 dictt = {}
 listy = []
 @bot.command()
 async def add(ctx,keyword):

    listy.append(keyword)
    dictt[ctx.author.id] = listy

Вариант 1: это приводило к созданию нового списка каждый раз, когда пользователь отправлял сообщениябот.То есть для каждого уникального пользователя в списке было только одно ключевое слово.Таким образом, если пользователь попытался добавить несколько ключевых слов, в список было добавлено только самое последнее *

Вариация 2. Это привело к добавлению ключевых слов от уникальных пользователей в один и тот же список, то есть каждый пользователь мог добавить несколько ключевых слов, ноони не были уникальными для каждого пользователя.

Как я могу добиться того, чтобы у каждого уникального пользователя был свой уникальный список, и при этом он мог добавить к нему несколько ключевых слов?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Мой совет - сохранить файл. Установка переменной будет уничтожена при выключении, перезагрузке или падении ...

filepath = os.path.dirname(os.path.realpath(__file__))
config = configparser.ConfigParser()
config.optionxform = str
try:
    config.read(f'{filepath}/data/keywords.cfg')
    user1 = config['User1'] #This might be an Idea if you have every user stored in vars
except Exception as error:
    print(f" -- ERROR : File not detected.\n{error}")
quit()

#Or use it like this
@bot.command()
async def add(ctx,keyword):
    keywordlist = config.items(ctx.message.user.id, raw=True)
    keywordlist.append(keyword)
    config[ctx.message.user.id] = dict(keywordlist)

@bot.command()
async def list(ctx):
    keywordlist = config[ctx.message.user.id]
    await ctx.send(keywordlist)

Файл будет выглядеть так:

[123456789]
FirstKeyword
AnotherKeyWord

[123789456]
Вау
Такое
Код ...

0 голосов
/ 21 января 2019

Иметь глобальный dict и проверять, существует ли идентификатор пользователя перед добавлением, если нет, создать новый список с новым словом.

memory = {}

def add(id, word):
    if id in memory.keys():
        memory[id].append(word)
    else:
        memory[id] = [word]

...