Задать вопрос
@Rektar01

Как заставить 2 файла работать вместе?

Здравствуйте, вот такая проблема, имеется 3 файла. Есть основной файл в котором хранятся команды для бота, есть отдельный файл под систему ролей, которая бы добавляла участнику сервера роль при добавлении реакции, по отдельности код работает, но если запустить все с основного файла, все равно работает только файл по ролям. Я пытался совместить 2 файла в один, результат тот же. Как мне решить эту проблему? Желательно что бы основной кол и код с ролями были в отдельных файлах.
kendra_main:
import discord
from discord.ext import commands
from discord import utils

import cfg
import economy
import roles

@cfg.bot.command(pass_context=True) #буквально для создания команды, в скобках параметры
async def РаботаЛитон(ctx):  # создаем асинхронную фунцию бота зароботка обычного работяги
    economy.Liton.LitonBalance = economy.SalaryForWorker + economy.Liton.LitonBalance #считаем баланс
    arg = str(economy.Liton.LitonBalance) #превращает число в текст
    await ctx.send('Ты заработал денег, баланс твоего Литона : ' + arg + ' тугриков.')  # отправляем в чат ответ

@cfg.bot.command(pass_context=True)
async def РаботаКендра(ctx):  # создаем асинхронную фунцию бота зароботка обычного работяги
    economy.Kendra.KendraBalance = economy.SalaryForWorker + economy.Kendra.KendraBalance #считаем баланс
    arg = str(economy.Kendra.KendraBalance) #превращает число в текст
    await ctx.send('Ты заработал денег, баланс твоей Кендры : ' + arg + ' тугриков.')  # отправляем в чат ответ

roles.client.run(cfg.TOKEN)

cfg.bot.run(cfg.TOKEN) #запуск бота

cfg:
import discord
from discord.ext import commands
from discord import utils

bot = commands.Bot(command_prefix='!') #вот это префикс бота
TOKEN = '***'

POST_ID = 754075723219861594 #вот это  код поста
MAX_ROLES_PER_USER = 3 #вот это макс количество ролей
ROLES = {
    '':754037719956455475, #Кендра
    '':754038164175454278, #Литон
}
EXCROLES = () #исключения

roles:
import discord
from discord import utils

import cfg

#Эта гипербола отвечает за выдачу ролей
class MyClient(discord.Client):
    async def on_ready(self):
        print('Logged on as {0}!'.format(self.user))

    async def on_raw_reaction_add(self, payload):
        if payload.message_id == cfg.POST_ID:
            channel = self.get_channel(payload.channel_id)  # получаем объект канала
            message = await channel.fetch_message(payload.message_id)  # получаем объект сообщения
            member = utils.get(message.guild.members,
                               id=payload.user_id)  # получаем объект пользователя который поставил реакцию
            try:
                emoji = str(payload.emoji)  # эмоджик который выбрал юзер
                role = utils.get(message.guild.roles, id=cfg.ROLES[emoji])  # объект выбранной роли (если есть)

                if (len([i for i in member.roles if i.id not in cfg.EXCROLES]) <= cfg.MAX_ROLES_PER_USER):
                    await member.add_roles(role)
                    print('[SUCCESS] User {0.display_name} has been granted with role {1.name}'.format(member, role))

                else:
                    await message.remove_reaction(payload.emoji, member)
                    print('[ERROR] Too many roles for user {0.display_name}'.format(member))


            except KeyError as e:
                print('[ERROR] KeyError, no role found for ' + emoji)
            except Exception as e:
                print(repr(e))

client = MyClient()
  • Вопрос задан
  • 181 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
@killeryStark
посмотрите в документации discord.py о cogs. команды можно модулями создавать, подключать и отключать нужные без перезагрузки скрипта итд
Ответ написан
Комментировать
@mrxor
Simple is better than complex
У вас управление не доходит до cfg.bot.run(cfg.TOKEN), используйте asyncio.gather для запуска обеих задач.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽