Форум программистов, компьютерный форум, киберфорум
Python: IDE, инструментарий
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 1
Регистрация: 08.10.2016
Сообщений: 28

Telegram Bot с использованием PyCharm и SQlite

05.08.2018, 11:38. Показов 8829. Ответов 0

Студворк — интернет-сервис помощи студентам
Здравствуйте! В программировании я не силён но уж очень хочется написать бота который будет продавать мои рисунки через Telegram.
На сколько я понимаю его функционал должен быть таким: Пользователь вводит ID рисунка и ему показываются все данные о нём (т.е. бот проверяет информацию в БД файле), далее, если пользователь согласен, он нажимает на кнопку "купить" и когда транзакция завершена, бот генерирует ссылку которая живёт секунд 5, например. Он переходит по ней и радуется. БД файл должен заполняться вручную и иметь атрибуты по типу Автор, Время, Дата, Цена, Ссылка.
Напишите, пожалуйста, код этой программы или укажите на похожий пример. Я на GitHub не смог найти. Но вот очень похожий, чтоб с нуля не начинать. Этот бот записывает всё что ему пишешь в список и удаляет из него (например список покупок). Вся информация сохраняется в файл todo.sqlite

Исходник с Ботом
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import json
import requests
import time
import urllib
 
 
from dbhelper import DBHelper
 
db = DBHelper()
 
TOKEN = '''токен бота'''
URL = "https://api.telegram.org/bot{}/".format(TOKEN)
 
 
def get_url(url):
    response = requests.get(url)
    content = response.content.decode("utf8")
    return content
 
 
def get_json_from_url(url):
    content = get_url(url)
    js = json.loads(content)
    return js
 
 
def get_updates(offset=None):
    url = URL + "getUpdates"
    if offset:
        url += "?offset={}".format(offset)
    js = get_json_from_url(url)
    return js
 
 
def get_last_update_id(updates):
    update_ids = []
    for update in updates["result"]:
        update_ids.append(int(update["update_id"]))
    return max(update_ids)
 
 
def handle_updates(updates):
    for update in updates["result"]:
        text = update["message"]["text"]
        chat = update["message"]["chat"]["id"]
        items = db.get_items(chat)
        if text == "/done":
            keyboard = build_keyboard(items)
            send_message("Select an item to delete", chat, keyboard)
        elif text == "/start":
            send_message("Welcome to your personal To-Do list. Send any text to me and I'll store it as an item. Send /done to remove items", chat)
        elif text.startswith("/"):
            continue
        elif text in items:
            db.delete_item(text, chat)
            items = db.get_items(chat)
            keyboard = build_keyboard(items)
            send_message("Select an item to delete", chat, keyboard)
        else:
            db.add_item(text, chat)
            items = db.get_items(chat)
            message = "\n".join(items)
            send_message(message, chat)
 
def get_last_chat_id_and_text(updates):
    num_updates = len(updates["result"])
    last_update = num_updates - 1
    text = updates["result"][last_update]["message"]["text"]
    chat_id = updates["result"][last_update]["message"]["chat"]["id"]
    return (text, chat_id)
 
def build_keyboard(items):
    keyboard = [[item] for item in items]
    reply_markup = {"keyboard":keyboard, "one_time_keyboard": True}
    return json.dumps(reply_markup)
 
def send_message(text, chat_id, reply_markup=None):
    text = urllib.parse.quote_plus(text)
    url = URL + "sendMessage?text={}&chat_id={}&parse_mode=Markdown".format(text, chat_id)
    if reply_markup:
        url += "&reply_markup={}".format(reply_markup)
    get_url(url)
 
def main():
    db.setup()
    last_update_id = None
    while True:
        updates = get_updates(last_update_id)
        if len(updates["result"]) > 0:
            last_update_id = get_last_update_id(updates) + 1
            handle_updates(updates)
        time.sleep(0.5)
 
 
if __name__ == '__main__':
    main()
База данных
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import sqlite3
 
 
class DBHelper:
    def __init__(self, dbname: object = "todo.sqlite") -> object:
        self.dbname = dbname
        self.conn = sqlite3.connect(dbname)
 
    def setup(self):
        tblstmt = "CREATE TABLE IF NOT EXISTS infogram (description text, owner text)"
        itemidx = "CREATE INDEX IF NOT EXISTS itemIndex ON infogram (description ASC)"
        ownidx = "CREATE INDEX IF NOT EXISTS ownIndex ON infogram (owner ASC)"
        self.conn.execute(tblstmt)
        self.conn.execute(itemidx)
        self.conn.execute(ownidx)
        self.conn.commit()
 
    def add_item(self, item_text, owner):
        stmt = "INSERT INTO infogram (description, owner) VALUES (?, ?)"
        args = (item_text, owner)
        self.conn.execute(stmt, args)
        self.conn.commit()
 
    def delete_item(self, item_text, owner):
        stmt = "DELETE FROM infogram WHERE description = (?) AND owner = (?)"
        args = (item_text, owner)
        self.conn.execute(stmt, args)
        self.conn.commit()
 
    def get_items(self, owner):
        stmt = "SELECT description FROM infogram WHERE owner = (?)"
        args = (owner,)
        return [x[0] for x in self.conn.execute(stmt, args)]
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.08.2018, 11:38
Ответы с готовыми решениями:

Telegram Bot(python-telegram-bot) - InlineButtons и фотографии
Добрый день, делал бота при помощи библиотеки python-telegram-bot и столкнулся с проблемой. Общение с ботом через Inline кнопки и edit...

telegram bot bot.send_media_group +invine
Можно ли каким либо способом при выводе фотографий и текста одним сообщением функцией bot.send_media_group , добавлять инвайн кнопку? ...

Telegram API (НЕ Telegram Bot API!) - как правильно спарсить все сообщения в чате?
Здравствуйте. Мне нужно выдрать все сообщения в определенном чате. Использую библиотеку TLSharp. Авторизация и т.д. прошли успешно. А...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.08.2018, 11:38
Помогаю со студенческими работами здесь

Telegram bot
Добрый день. Проблема у меня следующая, написал бота для телеги, локально через ngrok все работает замечательно, но после выкладывания на...

Telegram bot
Здравствуйте, учусь писать телеграм ботов. Подскажите пожалуйста библиотеку, для asp.net mvc 5. И я слышал что, он не будет работать без...

Как взять данные из гугл таблиц
Добрый день в питоне я полный ноль, но для работы нужно написать телеграм бота. пример что нужно я пишу боту улицу например Аношкина ...

Telegram bot
В общем мне нужно чтобы бот в конкретной ситуации отвечал: Например я пишу /setting Он выдает сообщение с двумя выборами ответа и...

Telegram Bot
доброе время суток подскажите пожалуйста по api Telegram Bot метод для поиска групп и чатов и еще один вопрос можно ли получить из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru