Discord 机器人的 Reddit API 脚本不起作用

问题描述 投票:0回答:1

因此,我一直在遵循编写自己的 Discord 机器人脚本的教程,并且在尝试制作此脚本以通过机器人从 Discord 获取随机模因时完全陷入困境。 当我运行主脚本时,它根本不会抛出任何错误,只是不起作用或在 Pycharm 日志中提供任何反馈。

我的主要脚本

import discord
from discord.ext import commands, tasks
import os
import asyncio
from itertools import cycle

bot = commands.Bot(command_prefix='.', intents=discord.Intents.all())

bot_statuses = cycle(["Status One", "Hello from Jimbo", "Status Code 123"])

@tasks.loop(seconds=5)
async def change_bot_status():
    await bot.change_presence(activity=discord.Game(next(bot_statuses)))

@bot.event
async def on_ready():
    print("Bot ready!")
    change_bot_status.start()


with open("token.txt") as file:
    token = file.read()

async def load():
    for filename in os.listdir('./cogs'):
        if filename.endswith('.py'):
            await bot.load_extension(f'cogs.{filename[:-3]}')

async def main():
    async with bot:
        await load()
        await bot.start(token)


asyncio.run(main())

我的 Reddit 脚本

import discord
from discord.ext import commands
from random import choice
import asyncpraw as praw


class Reddit(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
        self.reddit = praw.Reddit(client_id="REDACTED", client_secret="REDACTED", user_agent="script:randommeme:v1.0 (by u/REDACTED)")
        print(type(self.reddit))

    @commands.Cog.listener()
    async def on_ready(self):
        print(f"{__name__} is ready!")

    @commands.command()
    async  def meme(self, ctx: commands.Context):

        subreddit = await self.reddit.subreddit("memes")
        posts_lists = []

        async for post in subreddit.hot(limit=40):
            if not post.over_18 and post.author is not None and any(post.url.endswith(ext) for ext in [".png", ".jpg", ".jpeg", ".gif"]):
                author_name = post.author.name
                posts_lists.append((post.url, author_name))
            if post.author is None:
                posts_lists.append((post.url, "N/A"))

            if posts_lists:

                random_post = choice(posts_list)

                meme_embed = discord.Embed(title="Random Name", description="Fetches random meme from r/memes", color=discord.Color.random())
                meme_embed.set_author(name=f"Meme requested by {ctx.author.name}", icon_url=ctx.author.avatar)
                meme_embed.set_image(url=random_post[0])
                meme_embed.set_footer(text=f"Post created by {random_post[1]}.", icon_url=None)
                await ctx.send(embed=meme_embed)

            else:
                await ctx.send("Unable to fetch post, try again later.")


    def cog_unload(self):
        self.bot.loop.create_task(self.reddit.close())


async def setup(bot):
    await bot.add_cog(Reddit(bot))

我尝试在整个脚本中放置一些 print 语句来了解问题所在,我想我已经将其范围缩小到第 18 行的 meme() 函数。我对编码相当陌生,所以这是就我自己能做到的而言。

python discord reddit
1个回答
0
投票

经过更多的故障排除后,我终于能够让它工作了。 事实证明这只是我的一些用户错误。 在 reddit 脚本中,我犯了三个主要错误,在我的 meme 函数中,我只是在“def”和函数之间有一个额外的空格。 其次,我在 meme 函数内的 if 语句中犯了一些缩进错误。 最后,当我稍后在同一代码块中将“posts_lists”变量分配给“random_post”变量时,我拼错了“posts_lists”变量

© www.soinside.com 2019 - 2024. All rights reserved.