有没有办法将字符串转换为discord.py中的成员类型?

时间:2020-07-20 12:49:32

标签: python python-3.x discord discord.py discord.py-rewrite

我一直在尝试向我的不和谐机器人添加一个井字游戏迷你游戏。我最初在@ client.command()中编写代码,因为我认为您可以在其中使用client.wait_for(),但不幸的是,您不能这样做。无论如何,我不得不将代码转换为可以在on_message()函数上使用,现在我遇到了从初始命令中获取discord.Member变量类型的问题,例如〜tictactoe @ user#1234。 因此,例如,我尝试在on_message()函数中编写此代码,但没有成功。

import tkinter as tk

class validate_login_entries: 
    def __init__(self, username, password, department_name): 
        self.username = username 
        self.password = password 
        self.department_name = department_name

    def check_inputs(self):
        print(self.username, self.password, self.department_name)
        return ( len(self.username) > 5 and len(self.username) < 10 
          and len(self.password) > 3 and len(self.department_name) > 4 )
    
    def check_identity_exsists(self):
        check = self.check_inputs()
        if check:
            print( 'Entries meet spec.')
        else:
            print( 'Entries fail spec.')
    
root = tk.Tk()

user = tk.StringVar()
pword = tk.StringVar()

tk.Label( root, text = 'User Name').grid( row = 0, column = 0 )
tk.Entry( root, width = 12, textvariable = user ).grid( row = 0, column = 1 )

tk.Label( root, text = 'Password').grid( row = 1, column = 0 )
e1 = tk.Entry( root, width = 12, textvariable = pword, show = '*' ).grid( row = 1, column = 1 )
# show = '*' to hide the password as it's typed

def on_click():
    valid = validate_login_entries( user.get(), pword.get(), 'Maths' )
    # This must run after ussr has input text
    valid.check_identity_exsists()

tk.Button( text = 'Login', command = on_click ).grid()

tk.mainloop()

这是我的完整代码:

if message.content.startswith("~tictactoe") or message.content.startwith("~ttt"):
    member = str(message).split(" ")
    member = discord.Member(member[1])
    channel = message.channel

任何帮助:)

1 个答案:

答案 0 :(得分:1)

您可以通过两种方式做到这一点:

  • 仅使用提及(100%的时间有效)
    由于提及等同于<!@user_id>,因此您可以将消息分为两个(命令和成员)并将<!@>剥离给成员var:
if message.content.startswith("~tictactoe") or message.content.startwith("~ttt"):
    command, member = message.content.split()
    member = member.strip("<!@>")
    member = await bot.fetch_user(int(member)) #bot or client
    #Do stuff
  • 没有提及(例如~ttt someone,但无法100%地工作)
    您必须使用discord.utils.get。如果找不到用户,它将返回None
from discord.utils import get
(...)
if message.content.startswith("~tictactoe") or message.content.startwith("~ttt"):
    command, member = message.content.split()
    member = get(message.guild.members, name=member)
    if member:
        #Do stuff
    else:
        return