【问题标题】:I made a simple discord gif bot, but it keeps sending the same gif when I use the command我做了一个简单的不和谐 gif 机器人,但是当我使用命令时它一直发送相同的 gif
【发布时间】:2022-08-05 09:01:45
【问题描述】:

所以我做了一个非常简单的 discord 机器人,当你使用命令 \'/dogggif\' 时,它会以狗 gif 响应。它可以工作,但有一个问题,如果用户再次使用该命令,我希望机器人用同一主题的另一个 gif 响应“狗”,但机器人用相同的 gif 响应。

我尝试过使用 random 模块,但它似乎不起作用(或者我不知道放置它的正确位置)。

在这段代码中,我使用了 Tenor 的 api,但我不介意使用其他网站来获取 gif。

注意:我对 python 很陌生,这个项目只是我认为会很有趣的事情,所以如果可以的话,请回答一个解释。

这是代码:

from urllib import response
import hikari
import lightbulb
import requests


bot = lightbulb.BotApp(
    token = \'DicordBotTokenHere\', 
    default_enabled_guilds = (123123123) #That should ID of your bot testing server on Discord#
    
)


@bot.listen(hikari.StartedEvent)
async def bot_started(event):
    print(\'Bot has started!!\') #Here it prints something when bot has succesfully started#

@bot.command
@lightbulb.command(\'doggif\',\'Sends a dog gif!\') #We set command\'s name and description#
@lightbulb.implements(lightbulb.SlashCommand) #We make it a slash command#
async def dogif(ctx):
    apikey = \'YourTenorApiKeyHere\'#You can get the key on tenor\'s api site#
    def get_gif(search_term):
        responseif =  requests.get(\"https://g.tenor.com/v1/search?q={}&key={}&limit=1\".format(search_term, apikey))
        data = responseif.json()
        return data[\'results\'][0][\'media\'][0][\'gif\'][\'url\']
        
        
        
    await ctx.respond(get_gif(\'dog\'))

    
bot.run()

    标签: python python-3.x discord


    【解决方案1】:
    responseif =  requests.get("https://g.tenor.com/v1/search?q={}&key={}&limit=1".format(search_term, apikey))
    data = responseif.json()
    return data['results'][0]['media'][0]['gif']['url']
    

    因此,您的函数基于search_term 给出了.gif

    await ctx.respond(get_gif('dog'))
    

    所以你总是通过相同的search_term:'dog'

    所以Tenor 总是会给你同样的结果,为什么不呢?


    如果您希望它每次发送不同的 gif,您可能需要发送 random gif:

    import random
    return data['results'][0]['media'][random.randint(1, 10)%10]['gif']['url']
    

    在这种情况下,您将在第一个 10 gif 之间进行搜索,但如果您确定在男高音上存在超过 dogs 的 10 gif,您可以更改此值。

    我想您必须避免在GET 请求链接的末尾添加&limit=1

    https://g.tenor.com/v1/search?q={}&key={}
    

    【讨论】:

    • 我已经尝试过您的代码,但它不起作用,因为 randint 需要在其中包含 ab 值,所以我尝试将它们设置为 1 和 10,但仍然不起作用。
    • 你能用回溯编辑你的问题吗?
    【解决方案2】:

    我知道我迟到了,可能这不是你要找的,但我几天前遇到了同样的问题,我做了一个程序来解决它。它非常简单,只是一个打印随机 url 的代码,它具有特定格式,可以在不和谐嵌入中工作(我的意思是,它看起来不错并且没有变形)。如果你想尝试一下,我会把所有准备好的代码放在这里,所以你可以随意改变你需要的一切。希望能帮助到你 :]

    import requests
    import random
    
    apikey = "APIKEY" #PUT YOUR APIKEY HERE.
    
    search_term = "dog"
    lmt = 25
    
    r = requests.get("https://tenor.googleapis.com/v2/search?q=%s&key=%s&limit=%s" % (search_term, apikey, lmt))
    
    results = []
    
    if r.status_code == 200:
      gifs = r.json()
    
      for i in range(lmt):
        gif_format = gifs["results"][random.randint(1, (lmt-1))]["media_formats"]["gif"]
        
        if gif_format["dims"][0] >= gif_format["dims"][1]:
          url = gif_format["url"]
          dims = gif_format["dims"]
    
          results.append(f"Width = {dims[0]}, Height = {dims[1]}, URL = {url}")
      
      if len(results) > 0:
        print(f"Here are the results for {search_term} ({lmt} url limit) (gif horizontal or square embed discord format): ")
        print(f"Printing 1 random result of {len(results)}")
        print(random.choice(results))
    
      else:
        print(f"ERROR: There is no results for {search_term}.")
    
    else:
      gifs = None
      print("ERROR: Something failed during the TENOR API request.")
    

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 2021-08-11
      • 2023-03-11
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多