所以我在代码的一开始就声明了3个变量
setup_prefix = None
setup_role: Role = None
setup_channel: TextChannel = None
然后在on_message
事件中,我尝试调用它们并更改它们的值
async def on_message(message):
if servers_setup[message.guild.id]['Step1']:
global setup_prefix
setup_prefix = message.content
servers_setup[message.guild.id]['Step1'] = False
await message.channel.send("Now, mention the role you want to have admin rights")
servers_setup[message.guild.id]['Step2'] = True
if servers_setup[message.guild.id]['Step2']:
global setup_role
setup_role: Role = message.content
servers_setup[message.guild.id]['Step2'] = False
await message.channel.send("Now, mention the channel where do you want the logs to go into")
servers_setup[message.guild.id]['Step3'] = True
if servers_setup[message.guild.id]['Step3']:
global setup_channel
setup_channel: TextChannel = message.content
servers_setup[message.guild.id]['Step3'] = False
await message.channel.send("Great, now I can take care of the rest!")
changeprefix(message, setup_prefix)
changeadmin(message, setup_role)
changelogs(message, setup_channel)
await message.channel.send("Everything was configured. Have a nice day")
第一个(setup_prefix
(没有任何问题,但当我启动机器人时,第二个在控制台中给我带来了一个错误
SyntaxError: annotated name 'role_setup' can't be global
我不知道问题出在哪里…
问题可以简化为
def foo():
global bar
bar:int = 1
当运行时,你会得到
File "test.py", line 3
bar:int = 1
^
SyntaxError: annotated name 'bar' can't be global
来自PEP 526-变量注释的语法,当不允许注释时:
试图注释受全局或在相同的函数范围内是非局部的。。。原因是全球和非局部不拥有变量;因此,类型注释属于在拥有变量的范围中。
您在脚本顶部的变量范围中进行了注释。无需在函数中重试。只需将该代码更改为
if servers_setup[message.guild.id]['Step2']:
global setup_role
setup_role = message.content