G
G
gavr062020-07-20 11:11:22
Python
gavr06, 2020-07-20 11:11:22

Who can help with the code for the bot in Python (in discord)?

hello, not long ago I started learning Python, and then I got the idea to create a discord bot in the Python programming language. I started downloading the necessary modules (Discord.py and tabulate), nothing happened with the first module, it was installed, but I had a problem with the second one, it did not want to be installed
here are the error logs

Collecting tabulate
  WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None))': /packages/c4/f4/770ae9385990f5a19a91431163d262182d3203662ea2b5739d0fcfc080f1/tabulate-0.8.7-py3-none-any.whl
  WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None))': /packages/c4/f4/770ae9385990f5a19a91431163d262182d3203662ea2b5739d0fcfc080f1/tabulate-0.8.7-py3-none-any.whl
  WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None))': /packages/c4/f4/770ae9385990f5a19a91431163d262182d3203662ea2b5739d0fcfc080f1/tabulate-0.8.7-py3-none-any.whl
  WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None))': /packages/c4/f4/770ae9385990f5a19a91431163d262182d3203662ea2b5739d0fcfc080f1/tabulate-0.8.7-py3-none-any.whl
  WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None))': /packages/c4/f4/770ae9385990f5a19a91431163d262182d3203662ea2b5739d0fcfc080f1/tabulate-0.8.7-py3-none-any.whl
ERROR: Could not install packages due to an EnvironmentError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries exceeded with url: /packages/c4/f4/770ae9385990f5a19a91431163d262182d3203662ea2b5739d0fcfc080f1/tabulate-0.8.7-py3-none-any.whl (Caused by ProtocolError('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None)))

and so many times, I already looked for help on the discord and on the Internet, no one helped!
please help, who can

here is the code itself
------
# -*- coding: utf-8 -*-
import sqlite3 #модуль sqlite
import discord #модуль discord api
from discord.ext import commands #необходимый класс для обработки команд
from tabulate import tabulate #удобный модуль для рисования таблиц
import json #используется только для обработки инвентаря, но ему можно найти и другое применение

conn = sqlite3.connect("Discord.db") # или :memory:
cursor = conn.cursor()

bot = commands.Bot(command_prefix='!')

@bot.event
async def on_ready():
    print("Bot Has been runned")#сообщение о готовности
    for guild in bot.guilds:#т.к. бот для одного сервера, то и цикл выводит один сервер
        print(guild.id)#вывод id сервера
        serv=guild#без понятия зачем это
        for member in guild.members:#цикл, обрабатывающий список участников
            cursor.execute(f"SELECT id FROM users where id={member.id}")#проверка, существует ли участник в БД
            if cursor.fetchone()==None:#Если не существует
                cursor.execute(f"INSERT INTO users VALUES ({member.id}, '{member.name}', '<@{member.id}>', 50000, 'S','[]',0,0)")#вводит все данные об участнике в БД
            else:#если существует
                pass
            conn.commit()#применение изменений в БД

@bot.event
async def on_member_join(member):
    cursor.execute(f"SELECT id FROM users where id={member.id}")#все также, существует ли участник в БД
    if cursor.fetchone()==None:#Если не существует
        cursor.execute(f"INSERT INTO users VALUES ({member.id}, '{member.name}', '<@{member.id}>', 50000, 'S','[]',0,0)")#вводит все данные об участнике в БД
    else:#Если существует
        pass
    conn.commit()#применение изменений в БД

@bot.event
async def on_message(message):
    if len(message.content) > 10:#за каждое сообщение длиной > 10 символов...
        for row in cursor.execute(f"SELECT xp,lvl,money FROM users where id={message.author.id}"):
            expi=row[0]+random.randint(5, 40)#к опыту добавляется случайное число
            cursor.execute(f'UPDATE users SET xp={expi} where id={message.author.id}')
            lvch=expi/(row[1]*1000)
            print(int(lvch))
            lv=int(lvch)
            if row[1] < lv:#если текущий уровень меньше уровня, который был рассчитан формулой выше,...
                await message.channel.send(f'Новый уровень!')#то появляется уведомление...
                bal=1000*lv
                cursor.execute(f'UPDATE users SET lvl={lv},money={bal} where id={message.author.id}')#и участник получает деньги
    await bot.process_commands(message)#Далее это будет необходимо для ctx команд
    conn.commit()#применение изменений в БД

@bot.command()
async def account(ctx): #команда _account (где "_", ваш префикс указаный в начале)
    table=
    for row in cursor.execute(f"SELECT nickname,money,lvl,xp FROM users where id={ctx.author.id}"):
        table.append([row[0],row[1],row[2],row[3]])
        await ctx.send(f">\n{tabulate(table)}")

@bot.command()
async def inventory(ctx):#команда _inventory (где "_", ваш префикс указаный в начале)

    counter=0
    for row in cursor.execute(f"SELECT inventory FROM users where id={ctx.author.id}"):
        data=json.loads(row[0])
        table=
        for row in data:
            prt=row
            for row in cursor.execute(f"SELECT id,type,name FROM shop where id={prt}"):
                counter+=1
                table.append([row[0],row[1],row[2]])
                
                if counter==len(data):
                    await ctx.send(f'>\n{tabulate(table)}')


@bot.command()
async def shop(ctx):#команда _shop (где "_", ваш префикс указаный в начале)
    counter=0
    table=
    for row in cursor.execute(f"SELECT id,type,name,cost FROM shop"):
        counter+=1
        table.append([row[0],row[1],row[2],row[3]])
        if counter==4:
            await ctx.send(f'>\n{tabulate(table)}')

async def buy(ctx, a: int):
    uid=ctx.author.id
    await ctx.send('Обработка... Если ответа не последует, указан неверный id предмета [buy {id}]')
    for row in cursor.execute(f"SELECT money FROM users where id={uid}"):
        money = row[0]
        for row in cursor.execute(f"SELECT id,name,cost FROM shop where id={a}"):
            cost=row[2]
            if money >= cost:#если у вас достаточно денег,то...
                money -=cost
                await ctx.send(f'Вы приобрели "{row[1]}" за {row[2]}')
                
                for row in cursor.execute(f"SELECT inventory FROM users where id={uid}"):
                    data=json.loads(row[0])
                    data.append(a)
                    daed=json.dumps(data)
                    cursor.execute('UPDATE users SET money=?,inventory = ? where id=?',(money,daed,uid))#добавляет предмет вам в инвентарь
                    pass
            if money < cost:#иначе сообщает о недостатке
                await ctx.send(f'Недостаточно средств')
                pass
    conn.commit()#применение изменений в БД

bot.run("TOKEN")

------

EDITED uploading

all this to glitch hosting I had another problem,
my console started to issue the following:
$ python bot.py

  File "bot.py", line 14
    async def on_ready():
        ^
SyntaxError: invalid syntax


  • OS: Windows 7(SP1)
  • Programs used: VS Code, Python, CMD
  • hosting used: Glitch.com

Answer the question

In order to leave comments, you need to log in

1 answer(s)
K
Konstantin, 2020-07-21
@gavr06

1. Website problem (15% chance)
2. Problem with your computer or internet (25% chance)
I don't know how to solve it, you can google it
CHANGED:
You can read about glitch here:
https://stackoverflow.com/ questions/43948454/pytho... and translate via Google Translate
https://coderoad.ru/48914050/%D0%9F%D1%80%D0%BE%D0...

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question