Команда в боте Discord срабатывает несколько раз (disnake)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Команда в боте Discord срабатывает несколько раз (disnake)

Сообщение Anonymous »

Код: Выделить всё

import disnake
import datetime
from disnake.ext import commands

class User_join(commands.Cog):
def __init__(self, bot):
self.bot=bot
self.count_user={}
self.new_member = {}

@commands.Cog.listener()
async def on_ready(self):
print("cog user_join.py is redy!")

@commands.Cog.listener()
async def on_member_join(self, ctx):
role_n = disnake.utils.get(ctx.guild.roles, id = 1188390498646360074)
role_moder = disnake.utils.get(ctx.guild.roles, id = 1215337519068217434)
channel_mod = self.bot.get_channel(1215337455859798046)
embed = disnake.Embed(
title="К нам прієднався новий друг!",
description=f"Його нік {ctx.name}\nглобальний нік {ctx.global_name}\nдавайте {role_moder.mention} пакажемо йому які ми макаки\n",
color=disnake.Colour.yellow(),
timestamp=datetime.datetime.now(),
)
embed.set_thumbnail(url = ctx.author.display_avatar.url)
await ctx.channel.send(embed=embed)
await ctx.add_roles(role_n)

@commands.Cog.listener()
async def on_message(self, ctx):
author_name = ctx.author.name
ap_member = ctx.author
try:
if self.new_member[author_name]:
sp_main = new_member[author_name]
sp_main.append(1)
new_member[author_name] = sp_main
else:
sp_main = new_member[author_name]
sp_main.append(1)
new_member[author_name] = sp_main
except KeyError:
pass

try:
if len(sp_main) == 100:
role_main = disnake.utils.get(ctx.guild.roles, id=11891071881>
del new_member[author_name]
await ap_member.add_roles(role_main)
except UnboundLocalError:
pass
await self.bot.process_commands(ctx)

"""
@commands.command()
async def info(self, ctx):
role_moder = disnake.utils.get(ctx.guild.roles, id = 1215337519068217434)
channel_mod = self.bot.get_channel(1215337455859798046)
embed = disnake.Embed(
title="К нам прієднався новий друг!",
description=f"Його нік {ctx.author.name}\nглобальний нік {ctx.author.>
color=disnake.Colour.yellow(),
timestamp=datetime.datetime.now(),
)
embed.set_thumbnail(url = ctx.author.display_avatar.url)
await channel_mod.send(embed=embed)
"""
def setup(bot):
bot.add_cog(User_join(bot))
первый винтик моего бота

Код: Выделить всё

import disnake
from disnake.ext import commands

class Prize(commands.Cog):
def __init__(self, bot):
#initialization of variables dictionary for all users in channels or memes
self.bot = bot
self.member = {}
self.memes_mas = {}

@commands.Cog.listener()
async def on_ready(self):
print("cog prize.py is redy!")

@commands.Cog.listener()
async def on_message(self, ctx):
member_name = ctx.author.name
member_appel = ctx.author
#Checking if a bot wrote and in which channel
if ctx.author.bot:
print(self.bot.user)
else:
channel = self.bot.get_channel(1188460762159644672)
yearch = self.bot.get_channel(1321891075014529054)
role = disnake.utils.get(ctx.guild.roles,  id=1321144881296441415)
if ctx.channel == channel:
try:
if self.memes_mas[member_name]:
sp = self.memes_mas[member_name]
sp.append(1)
self.memes_mas[member_name] = sp
else:
sp = self.memes_mas[member_name]
sp.append(1)
self.memes_mas[member_name] = sp
except KeyError:
self.memes_mas[member_name] = [1]
elif ctx.channel == yearch:
await member_appel.remove_roles(role)
else:
try:
if self.member[member_name]:
sp = self.member[member_name]
sp.append(1)
self.member[member_name] = sp
else:
sp = self.member[member_name]
sp.append(1)
self.member[member_name] = sp
except KeyError:
self.member[member_name] = [1]
print(self.member)
await self.bot.process_commands(ctx)

@commands.command()
async def result(self, ctx):
#Result from all channels
longest_list_key = max(self.member, key=lambda k: len(self.member[k]))
role = disnake.utils.get(ctx.guild.roles, id=1321144881296441415)
user = ctx.guild.get_member_named(longest_list_key)
embed = disnake.Embed(
title = "Нагорода найбалакучіший сервера",
description = f"Нагороджується {longest_list_key} він написав {len(self.member[longest_list_key])} повідмлень за цей місяц",
color = 0x800082,
)
embed.set_thumbnail(url = user.display_avatar.url)
await user.add_roles(role)
await ctx.send(embed=embed)
self.member.clear()

@commands.command()
async def result_meme(self,ctx):
#Result from memes
longest_list_key1 = max(self.memes_mas, key=lambda k: len(self.memes_mas[k]))
user1 = ctx.guild.get_member_named(longest_list_key1)
embed1 = disnake.Embed(
title = "Нагорода найсмішніший сервера",
description = f"Нагороджується {longest_list_key1} він надіслав {len(self.memes_mas[longest_list_key1])} мемів в цей місяц",
color = 0xfdd20
)
embed1.set_thumbnail(url = user1.display_avatar.url)
await ctx.send(embed=embed1)

def setup(bot):
bot.add_cog(Prize(bot))
второй винтик моего бота

Код: Выделить всё

import os

import disnake
from disnake.ext import commands

bot = commands.Bot(command_prefix="!", help_command=None, intents=disnake.Intents.all())

@bot.event
async def on_ready():
print(f"bot {bot.user} is ready")

@bot.command()
@commands.is_owner()
async def unload(stx, extension):
bot.unload_extension(f"cogs.{extension}")

@bot.command()
@commands.is_owner()
async def load(stx, extension):
bot.load_extension(f"cogs.{extension}")

@bot.command()
@commands.is_owner()
async def reload(stx, extension):
bot.reload_extension(f"cogs.{extension}")

for filename in os.listdir("cogs"):
if filename.endswith(".py"):
bot.load_extension(f"cogs.{filename[:-3]}")

bot.run("token")
это фотография результата работы команды. Ее следует активировать один раз, но в итоге она активируется три раза. Я также добавил еще одну команду, и она тоже работает три раза
Изображение

Код: Выделить всё

bot cultus DJ#2371 is ready
cog user_join.py is redy!
cog prize.py is redy!
{'liv_malum': [1]}
{'liv_malum': [1, 1]}
{'liv_malum': [1, 1, 1]}
{'liv_malum': [1, 1, 1, 1]}
{'liv_malum': [1, 1, 1, 1, 1]}
cultus DJ#2371
cultus DJ#2371
cultus DJ#2371
во втором блоке, если вы вызовете команду result, будут отображены три встраивания, а в третьем у пользователя будет еще одно сообщение, так же, как в первом блоке документируется событие on_massage, тогда встраивания будет два во втором еще одном сообщении
Мне нужно, чтобы бот отслеживал написанные сообщения и когда я пишу команду, встраивание должно отображаться с результатами того, кто написал больше всего сообщения и сколько. Должно быть одно встраивание и отображение нескольких. Команда срабатывает три раза, хотя я вызывал ее один раз.
пожалуйста, помогите

Подробнее здесь: https://stackoverflow.com/questions/793 ... es-disnake
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как написать бот Discord Auto-voice на python disnake?
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Как я могу обновить взаимодействие в Disnake?
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как я могу обновить взаимодействие в Disnake?
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Discord Bot с Discord.py 2.0 - невозможно отобразить изображение из параметра ресурсов в discord.Streaming()
    Anonymous » » в форуме Python
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous
  • Как автоматически добавлять пользователей в файл JSON для команды ежедневной серии в боте Discord?
    Гость » » в форуме Python
    0 Ответы
    33 Просмотры
    Последнее сообщение Гость

Вернуться в «Python»