Discord.py重写Giphy Cog错误:未闭合连接器
我正在尝试为我的discord.py bot构建一个Giphy cog,它抛出了以下错误Discord.py重写Giphy Cog错误:未闭合连接器,discord.py,discord.py-rewrite,giphy-api,Discord.py,Discord.py Rewrite,Giphy Api,我正在尝试为我的discord.py bot构建一个Giphy cog,它抛出了以下错误 未关闭的客户端会话 客户端会话: 未闭合连接器 连接:['[(,77055.671)]] 连接器: 有人知道这是什么原因吗?我将如何修复它 这是我的密码: 导入操作系统 进口aiohttp 随机输入 进口不和 从discord.ext导入命令 从dotenv导入加载\u dotenv 加载_dotenv() prefix=os.getenv(“客户端前缀”) giphy\u api=os.getenv(“
未关闭的客户端会话
客户端会话:
未闭合连接器
连接:['[(,77055.671)]]
连接器:
有人知道这是什么原因吗?我将如何修复它
这是我的密码:
导入操作系统
进口aiohttp
随机输入
进口不和
从discord.ext导入命令
从dotenv导入加载\u dotenv
加载_dotenv()
prefix=os.getenv(“客户端前缀”)
giphy\u api=os.getenv(“giphy\u api\u键”)
命令_attrs={'hidden':False}
类FunCog(commands.Cog,name='Fun commands',command\u attrs=command\u attrs):
定义初始化(自我,客户机):
self.client=client
@commands.command(name='gif')
异步定义(self,ctx,*,search,json=None):
嵌入=discord.embed(color=discord.color.blue())
session=aiohttp.ClientSession()
如果搜索=“”:
response=等待会话。获取('https://api.giphy.com/v1/gifs/random?api_key=“+giphy_api)
data=json.load(等待响应.text())
embed.set_image(url=data['data']['images']['original']['url'])
其他:
search.replace(“”,“+”)
response=wait session.get(
'http://api.giphy.com/v1/gifs/search?q=“+search+”&api_key='+giphy_api+”&limit=10')
data=json.load(等待响应.text())
gif_choice=random.randint(0,9)
嵌入.set_图像(url=data['data'][gif_选项]['images']['original']['url']))
等待会话。关闭()
等待ctx.send(嵌入=嵌入)
def设置(客户端):
client.add_cog(FunCog(client))
出于安全原因,我省略了我的Giphy API密钥。
我正在使用discord.py rewrite
和python3.8.6
,如果有帮助的话
基本上,我希望能够搜索一个gif与它的标签,它将响应一个随机gif从giphy为指定的标签
--编辑--
Events.py
文件.env
文件tenor\u api
env,因为它不会被使用,并且与此问题无关导入操作系统
进口aiohttp
随机输入
进口不和
导入json
从discord.ext导入命令
从dotenv导入加载\u dotenv
加载_dotenv()
prefix=os.getenv(“客户端前缀”)
giphy\u api=os.getenv(“giphy\u api\u键”)
命令_attrs={'hidden':False}
类FunCog(commands.Cog,name='Fun commands',command\u attrs=command\u attrs):
定义初始化(自我,客户机):
self.client=client
self.session=aiohttp.ClientSession()
def cog_卸载(自):
self.client.loop.create_任务(self.session.close())
@commands.command(name='gif')
异步def_gif(self,ctx,*,search):
session=self.session
嵌入=discord.embed(Color=discord.Color.dark_gold())
如果搜索=“”:
response=等待会话。获取('https://api.giphy.com/v1/gifs/random?api_key=“+giphy_api)
data=json.load(等待响应.text())
embed.set_image(url=data['data']['images']['original']['url'])
其他:
search.replace(“”,“+”)
response=wait session.get(
'http://api.giphy.com/v1/gifs/search?q=“+search+”&api_key='+giphy_api+”&limit=10')
data=json.load(等待响应.text())
gif_choice=random.randint(0,9)
嵌入.set_图像(url=data['data'][gif_选项]['images']['original']['url']))
等待ctx.send(嵌入=嵌入)
def设置(客户端):
client.add_cog(FunCog(client))
它可能不是最好的,因为它只使用一个标记,但我可能会在另一个时间改进它xD这是由您的会话行为引起的。如果搜索为空,则不会关闭会话。简而言之:您应该在使用后关闭会话 最简单的解决方案是使用上下文管理器:
#https://docs.aiohttp.org/en/stable/#client-范例
与aiohttp.ClientSession()作为会话异步:
与session.get()异步http://python.org”)作为答复:
否则,您可以为Cog创建会话,并在卸载时将其关闭:
类myCG(commands.Cog):
定义初始化(客户端):
self.client=client
self.session=aiohttp.ClientSession()
# https://discordpy.readthedocs.io/en/stable/ext/commands/api.html#discord.ext.commands.Cog.cog_unload
def cog_卸载(自):
#因为close是协同程序,
#我们需要把它叫做sync func
#让我们创建异步IO任务
self.client.loop.create_任务(self.session.close())
#或者,我们可以使用“分离”:
#self.session.detach()
@commands.command()
异步def mycmd(ctx):
与self.session.get异步(“https://example.com)作为答复:
等待ctx发送(响应状态)
顺便说一句,您可以使用on\u command\u error
来只使用一个命令,而不是对每个命令都这样做。这绝对是有用的。我必须为那个提示设置那个事件(=)我在上面用它编辑了我的帖子。。。。我再次编辑了这篇文章,我做了一些工作,但没有达到预期的效果。我不知道你的问题是什么,但是对于代码,我可以建议对请求方法使用params
参数,而不是手动构建它:。它还将正确编码字符串,因此您不需要使用search.replace(“,”+)
partYo,不用担心。tbh它实际上是有效的,我猜这段代码根本不允许多个标记。但我在这个具体问题h中遇到的问题