import discord
from discord.ext import commands
from discord.commands import slash_command
import asyncio
import random
class Giveaway(commands.Cog):
def __init__(self, bot):
self.bot = bot
@slash_command(description="Giveaway System")
@commands.has_permissions(administrator=True)
async def start_giveaway(ctx, prize: str):
giveaway_role = discord.utils.get(ctx.guild.roles, name=giveaway_role_name)
if not giveaway_role:
await ctx.send(f'Die Rolle "{giveaway_role_name}" wurde nicht gefunden.')
return
embed = discord.Embed(
title='🎉 Giveaway',
description=f'Preis: {prize}\nReagiere mit 🎉, um teilzunehmen!',
color=discord.Color.blue()
)
embed.set_footer(text=f'Gestartet von {ctx.author.display_name}')
message = await ctx.send(content=giveaway_role.mention, embed=embed)
await message.add_reaction('🎉')
await asyncio.sleep(giveaway_duration)
message = await message.channel.fetch_message(message.id)
reaction = discord.utils.get(message.reactions, emoji='🎉')
users = await reaction.users().flatten()
winner = random.choice(users)
if winner == bot.user:
# Falls der Bot der Gewinner ist, wird ein neuer Gewinner ausgewählt.
users.remove(bot.user)
winner = random.choice(users)
if winner:
embed = discord.Embed(
title='🎉 Giveaway beendet',
description=f'Preis: {prize}\nGewinner: {winner.mention}',
color=discord.Color.green()
)
await ctx.send(embed=embed)
else:
await ctx.send('Niemand hat am Giveaway teilgenommen. Es gibt keinen Gewinner.')
@start_giveaway.error
async def start_giveaway_error(ctx, error):
if isinstance(error, commands.MissingPermissions):
await ctx.send('Du hast nicht die erforderlichen Berechtigungen, um dieses Giveaway zu starten.')
def setup(bot):
bot.add_cog(Giveaway(bot))```
#Allgemeine Hilfe
1 messages · Page 38 of 1
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\cog.py", line 774, in _load_from_module_spec
spec.loader.exec_module(lib) # type: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap_external>", line 936, in exec_module
File "<frozen importlib._bootstrap_external>", line 1074, in get_code
File "<frozen importlib._bootstrap_external>", line 1004, in source_to_code
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "c:\Users\Rysii\OneDrive\Desktop\neu discord bot\cogs\Giveaway System.py", line 16
await ctx.send(f'Die Rolle "{giveaway_role_name}" wurde nicht gefunden.')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: 'await' outside function
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "c:\Users\Rysii\OneDrive\Desktop\neu discord bot\main.py", line 113, in <module>
bot.load_cogs("cogs")
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\ezcord\bot.py", line 152, in load_cogs
self.load_extension(f"{'.'.join(path.parts)}.{name}")
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\cog.py", line 910, in load_extension
self._load_from_module_spec(spec, name)
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\cog.py", line 777, in _load_from_module_spec
raise errors.ExtensionFailed(key, e) from e
discord.errors.ExtensionFailed: Extension 'cogs.Giveaway System' raised an error: SyntaxError: 'await' outside function (Giveaway System.py, line 16)```
falsch eingerückt
NEIN
Der Labert
Ich habe mir zwar Timos Video zu GitHub angeguckt aber er hatte nur gezeigt soweit ich weiß wie man ein Projekt erstellt auf GitHub und es bei PyCharm laden kann aber ich will ein Projekt was ich schon auf PyCharm habe auf GitHub hochaden.Das mit ignore und sachen reinschreiben hab ich auch gemacht bin mir aber nicht sicher ob es richtig ist und wie ich das überprüfen kann (Am besten wehre wenn jemand call könnte damit er es mir Live erklären kann und ich eine Übertragung machen kann)
Hab Post ja gelöscht
Eig nd so
Aber könntest trotzdem erklären wie GitHub funktioniert oder eher net?
Eher gesagt die Fragen oben beantworten
Mein Discord Server
► https://discord.gg/zfvbjTEzv6
Links aus dem Video
GitHub ► https://github.com/
Code auf Github ► https://github.com/tibue99/tutorial-bot
Discord Developer Portal ► https://discord.com/developers/applications
Pycord
Docs ► https://docs.pycord.dev/
Guide ► https://guide.pycord.dev/introduction/
Discord Server ► https://dis...
Lese doch erstmal denn Text Cat
Oh sry hab text da vor nicht gelesen);
Net schlimm :)
In this step-by-step tutorial, learn how to use Git and GitHub for source control management (SCM). We start with Git. What is it? How you can get it running on your system, and how you can start working with it? Then we look at GitHub.com, a platform for hosting and collaborating on Git repositories. By the end of this video, you'll be well on...
Learn about Git and GitHub in this tutorial. These are important tools for all developers to understand. Git and GitHub make it easier to manage different software versions and make it easier for multiple people to work on the same software project.
This course was developed by Gwen Faraday. Check out her YouTube channel: https://www.youtube.co...
Danke
Learn the basics of PyCharm Version Control with Git & GitHub in 12 minutes!
⭐ Install PyCharm and Python: https://www.youtube.com/watch?v=XsL8JDkH-ec
🔍 PyCharm Tutorial Playlist: https://www.youtube.com/playlist?list=PL30AETbxgR-dKTR0wBfkQw9mywvkCi3q_
⌚ Timestamps ⌚
00:00 | Introduction
00:40 | Local History
01:20 | Create a local Git Reposi...
Weiss einer wie geht das?
Was genau??
Das wird so dick geschrieben wie geht das?
Fett
**Fett**
Aber maybe is das auch in markdown
Dann so:
Hallo
Hallo
Hallo
# Hallo
## Hallo
### Hallo
Danke
Kein Ding
Würdet ihr sagen db sollte man bei git.ignore reinpacken?
Hallo?
Existiert noch wer?
Wenn das Projekt privat ist kannst du die mit hochladen. Es wäre Datenachutzrechtlich aber nicht erlaubt diese öffentlich zu machen
Bzw sobald da irgendwas drin steht was von Usern kommt
K also zu sicherheit einfach ihn igno
Ich bin dabei ein Anti Raid system zu coden und ich möchte jetzt abspeichern wann der audit log entry gemacht wurde. Ich habe das bis jetzt mit ner liste versucht. Wie genau kann ich das jetzt machen, weil wenn man nen datetime object mit list.append() einspeichert wird das soweit ich weiß zu nem string und nen string kann ich nicht minus nen datetime object rechnen um zu wissen wie lange der eintrag her ist. Hat jemand ne idee wie ich das machen kann?
Oke
du kannst in einer liste auch datetime objekte speichern, muss nicht als string sein
ok nice das wusste ich nicht. Danke
der code hat nichts mit dem error zu tun, aber du versuchst einen primary key in deine DB einzufügen, der schon existiert
wenn du das ignorieren magst, kannst du INSERT OR IGNORE verwenden
@commands.has_role(id)
Was wäre wenn ich noch @commands.has_permissions(administrator=True) schreiben würde? Könnten dann Leute mit der Rolle den cmd ausführen oder müsste beides zutreffen?
ich denke alle checks müssen erfolgreich sein, damit der user den befehl ausführen kann
Ah okay!
ich wüsste aktuell nicht wie, höchstens hiermit: https://docs.pycord.dev/en/master/api/models.html#discord.TextChannel.default_thread_slowmode_delay
Pycord
Models are classes that are received from Discord and are not meant to be created by the user of the library. Attributes key, url. Methods def is_animated, async read, def replace, async save, def ...
[INFO ] [deps ] Successfully imported "kivy_deps.angle" 0.3.3
[INFO ] [deps ] Successfully imported "kivy_deps.glew" 0.3.1
[INFO ] [deps ] Successfully imported "kivy_deps.sdl2" 0.6.0
[INFO ] [Kivy ] v2.2.0
[INFO ] [Kivy ] Installed at "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\kivy\__init__.py"
[INFO ] [Python ] v3.11.2 (tags/v3.11.2:878ead1, Feb 7 2023, 16:38:35) [MSC v.1934 64 bit (AMD64)]
[INFO ] [Python ] Interpreter at "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\python.exe"
[INFO ] [Logger ] Purge log fired. Processing...
[INFO ] [Logger ] Purge finished!
[INFO ] [Factory ] 190 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil (img_ffpyplayer ignored)
[INFO ] [Text ] Provider: sdl2```
Sieht schön aus
ja aber start die app nicht
ich weis nicht warum die app start nicht [INFO ] [Logger ] Record log in C:\Users\Rysii\.kivy\logs\kivy_23-05-30_42.txt [INFO ] [deps ] Successfully imported "kivy_deps.angle" 0.3.3 [INFO ] [deps ] Successfully imported "kivy_deps.glew" 0.3.1 [INFO ] [deps ] Successfully imported "kivy_deps.sdl2" 0.6.0 [INFO ] [Kivy ] v2.2.0 [INFO ] [Kivy ] Installed at "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\kivy\__init__.py" [INFO ] [Python ] v3.11.2 (tags/v3.11.2:878ead1, Feb 7 2023, 16:38:35) [MSC v.1934 64 bit (AMD64)] [INFO ] [Python ] Interpreter at "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\python.exe" [INFO ] [Logger ] Purge log fired. Processing... [INFO ] [Logger ] Purge finished! [INFO ] [Factory ] 190 symbols loaded [INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil (img_ffpyplayer ignored) [INFO ] [Text ] Provider: sdl2
from kivy.app import App
from kivy.uix.label import Label
class MyApp(App):
def build(self):
return Label(text='timo is er beste')
if __name__=='__main':
MyApp().run()```
__main__
?
war dumm
Geht's?
😭
ja
Das beantwortet die frage nicht
Okay
ich war einfach dumm
super(BoxLayout, self).__init__(**kwargs)
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\kivy\uix\layout.py", line 76, in __init__
super(Layout, self).__init__(**kwargs)
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\kivy\uix\widget.py", line 357, in __init__
super(Widget, self).__init__(**kwargs)
File "kivy\_event.pyx", line 238, in kivy._event.EventDispatcher.__init__
TypeError: Properties ['orientaion'] passed to __init__ may not be existing property names. Valid properties are ['center', 'center_x', 'center_y', 'children', 'cls', 'disabled', 'height', 'ids', 'minimum_height', 'minimum_size', 'minimum_width', 'motion_filter', 'opacity', 'orientation', 'padding', 'parent', 'pos', 'pos_hint', 'right', 'size', 'size_hint', 'size_hint_max', 'size_hint_max_x', 'size_hint_max_y',
'size_hint_min', 'size_hint_min_x', 'size_hint_min_y', 'size_hint_x', 'size_hint_y', 'spacing', 'top', 'width', 'x', 'y']
PS C:\Users\Rysii\OneDrive\Desktop\Kivy> ```
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
class MyApp(App):
def build(self):
layout = BoxLayout(orientaion='verlical')
label1 = Label(text='Hello World')
label2 = Label(text='ok')
button = Button(text= 'start the app by ama')
layout.add_widget(label1)
layout.add_widget(label2)
layout.add_widget(button)
return layout
if __name__=='__main__':
MyApp().run()```
Du hast bei orientation ein t vergessen
Tippfehler
layout = BoxLayout(orientation='vertical')
Nicht nur bei orientation, er hat auch vertical falsch geschrieben
hab auch mit kommen
Ja sorry, hab nach dem orientation nd mehr weitergelesen 😂 nennt sich 1 Fehler nach dem anderen
py-cord oder discord.py?
Dann muss er es aber Importieren
Jaa das auch
from discord.commands Import SlashCommandGroup
Und dann:
@emojiquiz.command()
async def erstellen(self, ctx, channel: Option(discord.Channel)):
#usw
Als Idee. Musst dann noch options Importen
Und bin ja dafür wenn du schon nen Ordner cogs hast auch cogs nutzt…
Musst Option schreiben… hab mich verschrieben, deshalb nd genau abschreiben xD
from discord.commands
Schick einfach mal den Code der Datei und wie du cogs in Main Datei lädst
Richtig
Jetzt die emojiquiz Datei
Den Code von der emojiquiz Datei, wie du Class machst und setupst.
hat einer gute bgcolor?
Mal eine dumme Frage, aber wenn ein user einen Slash command benutzt, ist die antwort darauf eine Bot-nachricht oder eine User-nachricht?
Mir gehts um sowas hier:
Wie meinst du??
Wenn ich das hier mache:
Ist zählt das als nachricht von mir, oder als eine vom Bot?
Ich vermute Bot
Aber man kann in nem on_message auch checken wer den cmd ausgeführt hat
Kann ich das so vergleichen?: if self.value == 1: feedback_embed.add_field(name="Sterne-Bewertung:", value="⭐ 1 Stern", inline=False) elif self.value == 2: feedback_embed.add_field(name="Sterne-Bewertung:", value="✨ 2 Sterne", inline=False) elif self.value == 3: feedback_embed.add_field(name="Sterne-Bewertung:", value="🌟 3 Sterne", inline=False) elif self.value == 4: feedback_embed.add_field(name="Sterne-Bewertung:", value="🥇 4 Sterne", inline=False) elif self.value == 5: feedback_embed.add_field(name="Sterne-Bewertung:", value="🏆 5 Sterne", inline=False)
Denn irgendwie geht es net und ich bin gerade zu hirntot, um eine Lösung zu finden
Is das in nem Dropdown?
ja
if self.values[0] == 1:
feedback_embed.add_field(name="Sterne-Bewertung:", value="⭐ 1 Stern", inline=False)
elif self.values[0]== 2:
feedback_embed.add_field(name="Sterne-Bewertung:", value="✨ 2 Sterne", inline=False)
elif self.values[0]== 3:
feedback_embed.add_field(name="Sterne-Bewertung:", value="🌟 3 Sterne", inline=False)
elif self.values[0]== 4:
feedback_embed.add_field(name="Sterne-Bewertung:", value="🥇 4 Sterne", inline=False)
elif self.values[0]== 5:
feedback_embed.add_field(name="Sterne-Bewertung:", value="🏆 5 Sterne", inline=False)
Probiers so
also self. value ist ein value von einem Dropdown übergeben, welches 1,2,3,4 oder 5 sein kann
Ein dropdown hat ja mehrere values, deshalb self.values[0]
self.value = value ist von einer anderen Klasse übergeben, deshalb geht es so net
Wie genau übergibst du es?
Zeig mal mehr code
Oder wenn du es moderner willst:
match self.values[0]:
case 1:
feedback_embed.add_field(name="Sterne-Bewertung:", value="⭐ 1 Stern", inline=False)
case 2:
feedback_embed.add_field(name="Sterne-Bewertung:", value="✨ 2 Sterne", inline=False)
case 3:
feedback_embed.add_field(name="Sterne-Bewertung:", value="🌟 3 Sterne", inline=False)
case 4:
feedback_embed.add_field(name="Sterne-Bewertung:", value="🥇 4 Sterne", inline=False)
case 5:
feedback_embed.add_field(name="Sterne-Bewertung:", value="🏆 5 Sterne", inline=False)
Müsste so auch gehen xD
ich probiers mal so
Zeig doch mal, wo / wie du es übergibst
async def callback(self,select, interaction: discord.Interaction):
print(f"{select.values[0]}")
modal = TutorialModal(title="Feedback", value=f"{select.values[0]}")
await interaction.response.send_modal(modal)
class FeedbackModal(discord.ui.Modal):
def __init__(self,value, *args, **kwargs):```
und das value beim feedback Modal will ich jetzt mit 1,2,3,4 und 5 vergleichen
Du übergibst es ja als String
Aber hast dann if self.value == 1: gemacht
ja was muss ich anders machen?
match self.value:
case "1":
feedback_embed.add_field(name="Sterne-Bewertung:", value="⭐ 1 Stern", inline=False)
case "2":
feedback_embed.add_field(name="Sterne-Bewertung:", value="✨ 2 Sterne", inline=False)
case "3":
feedback_embed.add_field(name="Sterne-Bewertung:", value="🌟 3 Sterne", inline=False)
case "4":
feedback_embed.add_field(name="Sterne-Bewertung:", value="🥇 4 Sterne", inline=False)
case "5":
feedback_embed.add_field(name="Sterne-Bewertung:", value="🏆 5 Sterne", inline=False)
Versuchs so, also nicht als Integer, sondern als String, weil du es auch als String übergibst
Kein Ding
Meinungsfreiheit wenn man bisschen Ahnung hat weiß man damit was anzufangen meiner Meinung nach

Wieso ohne discord.ui.View, wäre das nicht einfacher?
@urban glen
ich habe ein fehlercode weil der cog nicht geht aber eigendlich funktioniert er
fehlercode:
Ignoring exception in on_connect
Traceback (most recent call last):
File "C:\Users\melvi\Desktop\bot\venv\lib\site-packages\discord\client.py", line 378, in _run_event
await coro(*args, **kwargs)
File "C:\Users\melvi\Desktop\bot\venv\lib\site-packages\discord\bot.py", line 1164, in on_connect
await self.sync_commands()
File "C:\Users\melvi\Desktop\bot\venv\lib\site-packages\discord\bot.py", line 719, in sync_commands
registered_commands = await self.register_commands(
File "C:\Users\melvi\Desktop\bot\venv\lib\site-packages\discord\bot.py", line 599, in register_commands
registered = await register("bulk", data, _log=False)
File "C:\Users\melvi\Desktop\bot\venv\lib\site-packages\discord\http.py", line 371, in request
raise HTTPException(response, data)
discord.errors.HTTPException: 400 Bad Request (error code: 30034): Max number of daily application command creates has been reached (200)
[INFO] Bot is online with EzCord 0.2.1
steht ja da. die maximale anzahl an application commands creates wurde erreicht
Du hast die maximale appliction command creates würde ereicht
da hilft leider nur warten. in der Zwischenzeit könntest du den Code mit einem anderen bot weiter testen
Weiß zufällig jemand, wie ich checken kann, ob der Command in einer Guild ausgeführt wurde?
if ctx.guild:
Danke Timo 🙂

Ignoring exception in on_connect
Traceback (most recent call last):
File "C:\Users\CDI\PycharmProjects\discord_bot\venv\lib\site-packages\discord\client.py", line 378, in _run_event
await coro(*args, **kwargs)
File "C:\Users\CDI\PycharmProjects\discord_bot\venv\lib\site-packages\discord\bot.py", line 1164, in on_connect
await self.sync_commands()
File "C:\Users\CDI\PycharmProjects\discord_bot\venv\lib\site-packages\discord\bot.py", line 738, in sync_commands
app_cmds = await self.register_commands(
File "C:\Users\CDI\PycharmProjects\discord_bot\venv\lib\site-packages\discord\bot.py", line 599, in register_commands
registered = await register("bulk", data, _log=False)
File "C:\Users\CDI\PycharmProjects\discord_bot\venv\lib\site-packages\discord\http.py", line 371, in request
raise HTTPException(response, data)
discord.errors.HTTPException: 400 Bad Request (error code: 30034): Max number of daily application command creates has been reached (200)
Das Problem kann ich doch lösen indem ich Command Groups mache oder net?
das Problem kannst du nicht lösen, du musst entweder warten oder einen anderen bot nutzen
ganz einfach gesagt hast du deinen bot in den letzten 24h zu viel getestet. jetzt musst du warten oder mit einem anderen bot weiter testen
K also halt Token ändern?
anderen bot nutzen zum testen
Meine ich ja
Immernoch
Hab mal gegoogelt angeblich heißt es das der Text zu lang ist
das stimmt nicht
raise HTTPException(response, data)
discord.errors.HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body
In 2: Application command names must be unique
Was das jetzt?
Und was kann ich dagegen machen
Bitte schau was da im Error steht, du hast commands mit dem gleichen Namen
Aber ka wo
wir auch nicht
Och Noé
Immer wenn ich mein Bot starte kommt das:
raise HTTPException(response, data)
discord.errors.HTTPException: 400 Bad Request (error code: 30034): Max number of daily application command creates has been reached (200)
Wenn ich dann eine File lösche funktioniert es wieder alles aber gestern hatte ich von so welchen Files doppelt so viel und da hatte noch alles funktioniert
Du hast zu viele Commands an einem Tag erstellt, steht doch da
Error lesen 
@next echo
Nein, 200 Commands
Also darf ich mörgen die Commands nochmal neu senden und dan funktioniert es?
Hab ich war trotzdem
Ne muss ja net mehr testen die Commands funktionieren ja
Warum gibt es sowas xD
PS C:\Users\EliasFYHP\OneDrive\Desktop\Discord Bot> & C:/Users/EliasFYHP/AppData/Local/Programs/Python/Python310/python.exe "c:/Users/EliasFYHP/OneDrive/Desktop/Discord Bot/main.py"
Traceback (most recent call last):
File "c:\Users\EliasFYHP\OneDrive\Desktop\Discord Bot\main.py", line 4, in <module>
from discord.ext import commands
ImportError: cannot import name 'commands' from 'discord.ext' (unknown location)
PS C:\Users\EliasFYHP\OneDrive\Desktop\Discord Bot>
Ig Installationsfehler, mach mal pip show py-cord
Oder deinstalliere py-cord und installiere es nochmal neu
thy
Falls du noch librarys wie d.py, d4py oder nextcord hast die am besten auch noch deinstallieren
geht danke
Perfekt 🙂
wie schreibt man eigene Pycord-Erweiterung?
ein beispiel dafür findest du hier: https://github.com/tibue99/ezcord
du könntest dir zb videos anschauen, wie du eine pyproject.toml datei erstellst oder daten bei pypi hochlädtst
du könntest aber auch bei pycord direkt eine pull request machen
was ist der unterschied zwischen async with db und await db?
bezogen auf execute
Bei async with zeigst du Daten raus, bei await trägst du was ein/änderst etwas. Also das macht aktiv was mit der DB
Würde ich spontan so sagen
ah ja stimmt danke^^
import discord
from discord.ext import commands
from discord.commands import slash_command
class member(commands.Cog):
def __init__(self,bot):
self.bot = bot
@slash_command(description= "zeig dir alle members an !")
async def member(self, ctx):
member_count =len(ctx.guild.members)
await ctx.respond(f"Der Server hat {member_count} Mitglieder")
await ctx.respond(embed=embed)
def setup(bot):
bot.add_cog(member(bot))```
warum zeig er commad nicht an?
nenne die Klasse Mal anders als die Command Methode
hab schon mit kommen
😭
import requests
def get_weather(api_key, city):
base_url = "http://api.openweathermap.org/data/2.5/weather"
params = {
"q": city,
"appid": api_key,
"units": "metric"
}
response = requests.get(base_url, params=params)
weather_data = response.json()
return weather_data
def display_weather(weather_data):
if weather_data["cod"] != "404":
temperature = weather_data["main"]["temp"]
description = weather_data["weather"][0]["description"]
print(f"Aktuelle Temperatur: {temperature}°C")
print(f"Wetterbeschreibung: {description}")
else:
print("Wetterinformationen nicht verfügbar.")
def main():
api_key = "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"
city = input("Geben Sie den Namen der Stadt ein: ")
weather_data = get_weather(api_key, city)
display_weather(weather_data)
if __name__ == "__main__":
main()```
File "c:\Users\Rysii\OneDrive\Desktop\wetter app by ama\app.py", line 30, in <module>
main()
File "c:\Users\Rysii\OneDrive\Desktop\wetter app by ama\app.py", line 27, in main
display_weather(weather_data)
File "c:\Users\Rysii\OneDrive\Desktop\wetter app by ama\app.py", line 16, in display_weather
temperature = weather_data["main"]["temp"]
~~~~~~~~~~~~^^^^^^^^
KeyError: 'main'```
Main kommt nicht in weather_data vor
lass dir das Mal Printen um zu schauen was alles drin vorkommt
weiss einer wie discord die rechte überschreibt? also ein member hat eine rolle diese rolle darf einen kanal sehen jetzt gebe ich dem member aber mit der rolle in den kanal settings das verbot den kanal zu sehen also rot? was überschreibt da welches recht die rolle den member oder der member die rolle?
Kann man den Code der die Transcripts beim @burnt prairie erstellt irgendwo finden? 👀
chat-exporter
Diese library nutzt Timo dafür
Das kannst du auch sehen, wenn du bei nem Transcript die Website untersuchst
Hmmm... Nutze discord4py - is des damit kompatibel?
Teste es
Okay, weißt du, ob das auch für ForumPosts funktioniert?
alle relevanten forks von discord.py sollten mit chat-exporter kompatibel sein. ist nur die frage ob discord4py relevant genug ist 
discord4py sollte funktionieren, weil es ja auf discord.py basiert
chat-exporter unterstützt nextcord, disnake und discord
Kannst ja zur not nach dem Installieren von chat-exporter dann den code davon bearbeiten und halt discord4py hinzufügen
du findest beispiele in der dokumentation ja
Einfach auf die Dreiecke klicken
Da kann mans sehen
Aaah!! Super!
Hallo!
Hallo!
custom_logs gibt es wohl nicht als argument
Wie dann
Was wie dann?
Ach egal
Test mal mit custom.logs
Okay
@slash_command(description="Nichts.")
async def nichts(self, ctx):
desc = ""
counter = 1
async with aiosqlite.connect(self.DB) as db:
async with db.execute("SELECT user_id, credits_count, msg FROM credits WHERE msg > 0 ORDER BY credits_count DESC LIMIT 10") as cursur:
async for user_id, credits, msg in cursur:
desc += f"{counter}. <@{user_id}> - *{credits} Credits* \n"
counter += 1
embed = discord.Embed(title="Nichts", description=f"*› Nichts!*\n\n{desc}", color=0x545af2)
await ctx.respond(embed=embed)
Wo ist da die Einrückung falsch?
Ja
es await ctx.respond ist nicht in class
???
Was kommt denn genau für ein Error?
Das frag mich auch
Dein Satz ergibt keinen sinn, also mit await ctx.respond ist nicht in class
Es ist in dem nichts command
@urban glen wo ist er eigentlich er error ?
?
Ach guck mal was Timo grad gepostet hat xD
sorry dafür, ich habe gerade ein neues update herausgebracht und den custom_logs parameter entfernt
die alten parameter waren etwas schwer zu verstehen fand ich
Mal noch ne Frage,
braucht mein Bot diese Gateway Intents um Kanäle & Kategorien zu erstellen?
Weil hab das in den Docs gelesen, blick da aber nicht durch.
dafür benötigst du keine der intents, die du im developer portal aktivieren musst, das sollte einfach so klappen
Ah okay, denkst du es gibt irgendwelche Komplikationen bzgl. ModMail-Bot?
Z.B. Mutual Server?
da brauchst du evtl den server member intent
message_content intents auch, weil ein Modmail is ja eig so aufgebaut, dass der supporter per channel schreibt und der, der support braucht halt per dm
Ich vermute das du es auch so hast, deshalb maybe auch message_content
Die sind ja Standardmäßig aktiviert im Developer Portal
ne, standardmäßig sind sie aus
Bin gerade brain afk, kann man bei Commands Debug_Guilds machen und wenn ja wie? .-.
ja, mit guilds_ids=[123]
Ah, stimmt danke
Traceback (most recent call last):
File "c:\Users\Rysii\OneDrive\Desktop\test bot\ama.py", line 12, in <module>
bot.load_cogs("cogs") # Load all cogs in the "cogs" folder
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\ezcord\bot.py", line 152, in load_cogs
self.load_extension(f"{'.'.join(path.parts)}.{name}")
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\cog.py", line 910, in load_extension
self._load_from_module_spec(spec, name)
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\cog.py", line 791, in _load_from_module_spec
raise errors.ExtensionFailed(key, e) from e
discord.errors.ExtensionFailed: Extension 'cogs.Giveaway' raised an error: AttributeError: 'Bot' object has no attribute 'add_command'```
das ist auf test bot
hab schon das das error
Du nutzt Prefix commands, also musst du in deiner Main File stattb discord.Bot dann commands.Bot machen
bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())
bei ezcord müsstest du statt ezcord.Bot dann ezcord.PrefixBot nutzen wenn du prefix commands nutzt
Joa bei ezcord bin ich raus, da bist du der profi
ich mache mit ezcord @urban glen
Okay @ruby sparrow
Wie erstellt man einen Button in einer selben class?
was meinst du genau für eine class? du kannst entweder direkt eine button klasse erstellen, oder eine view klasse
im button video sind beide möglichkeiten erklärt
Mein Discord Server
► https://discord.gg/zfvbjTEzv6
Code auf Github ► https://github.com/tibue99/tutorial-bot
Discord Developer Portal ► https://discord.com/developers/applications
Tutorial Playlist ► https://youtube.com/playlist?list=PLwRWzD1Sw5lXZApchxorxeBQ_P_Fjdsj1
Pycord
Docs ► https://docs.pycord.dev/
Guide ► https://guide.pycord.dev/int...
Okay danke
Und wie erstelle ich einen button in einer klasse wo ein command ist?
Wird das da auch erklärt?
Das Ding ist ich möchte ja einen Cookie clicker coden und immer wenn du ja auf den Button drückst soll ich das ja erhöhen
Oder wenn man sich ein Upgrade für Cookies kauft
oder ist das zu kompliziert?
das kannst du auch mit so einer klasse machen
ok thx
Mein Discord Server
► https://discord.gg/zfvbjTEzv6
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Mein Hosting* ► https://tidd.ly/3gJufg6
Code auf Github ► https://github.com/tibue99/tutorial-bot
PYCORD
Docs ► https://docs.pycord.dev/
Guide ► https://guide.pycord.dev/introduction/
Discord Server ► https://discord.gg/pycord
Discord Developer Portal ► https://discord...
Mit ctx.send_modal respondest du auch. Also musst du entweder das embed so senden oder dir was anderes überlegen.
Was hast geändert?
Das mit embed oder Modal
Schreib mal return await ctx.respond
Schick mal den ganzen Error
Oder nen Bild von dem
mach doch message.edit? (wenn's per Slash command ist dann die Pins angucken wie die msg geholt wird)
ist eigentlich im Sinne das gleiche nur komprimiert
await ctx.defer() zählt auch schon als geantwortet
=> Followup
Ist es irgendwie möglich egal welchen Command man ausführt das der Bot im Wartungsmodus ist?
Also das dann ein Error kommt
ja, das geht entweder mit einem globalen check oder mit @before_invoke
Mein Discord Server
► https://discord.gg/zfvbjTEzv6
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Mein Hosting* ► https://tidd.ly/3gJufg6
Code auf Github ► https://github.com/tibue99/tutorial-bot
PYCORD
Docs ► https://docs.pycord.dev/
Guide ► https://guide.pycord.dev/introduction/
Discord Server ► https://discord.gg/pycord
Discord Developer Portal ► https://discord...
das ist nun möglich :)

Mein Discord Server
► https://discord.gg/zfvbjTEzv6
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Mein Hosting* ► https://tidd.ly/3gJufg6
Code auf Github ► https://github.com/tibue99/tutorial-bot
PYCORD
Docs ► https://docs.pycord.dev/
Guide ► https://guide.pycord.dev/introduction/
Discord Server ► https://discord.gg/pycord
Discord Developer Portal ► https://discord...
du kannst jetzt den ezcord error handler deaktivieren und trotzdem den error webhook nutzen. hab ich extra für dich eingebaut 
verstehe denn error nicht
Space Bot#1420 is ready
Ignoring exception in on_ready
Traceback (most recent call last):
File "C:\Users\EliasFYHP\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 378, in _run_event
await coro(*args, **kwargs)
File "c:\Users\EliasFYHP\OneDrive\Desktop\Discord Bot\main.py", line 43, in on_ready
if msg.content.startswith("?play"):
NameError: name 'msg' is not defined
msg ist nicht definiert
Schick mal bitte denn code
Komm in Talk, dann siehst du den Code
Er hat es im on_ready ..
Msg ist nicht definiert
Kann net
@digital crypt immer 
[youtube] h3h035Eyz5A: Downloading webpage
ERROR: Unable to extract uploader id; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see https://yt-dl.org/update on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
ERROR: Unable to extract uploader id; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see https://yt-dl.org/update on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
GitHub
Command-line program to download videos from YouTube.com and other video sites - Issues · ytdl-org/youtube-dl
GitHub
Command-line program to download videos from YouTube.com and other video sites - youtube-dl/README.md at master · ytdl-org/youtube-dl
Wir meinten von dein coden mh
und nicht von github
Wie kann man mit ezcord prefix commands machen, und kann ich da trotzdem /slash commands nutzen?
Aber Slash Commands gehen
genau
okay, danke
und wie macht man dann slash commands? haste da nen video oder beispielcode?
So wie davor auch vermute ich mal
hab ka wie man die da gemacht hat...
genauso wie normale slash commands bei pycord
oh bin dumm, meine prefix commands
die machst du auch genau so wie bei pycord :D
Ja hab die nd benutzt xd
also zu prefix commands habe dazu kein tutorial gemacht, da prefix commands outdated sind. wenn du welche machen möchtest schau dir mal die beispiele im pycord github oder andere youtube videos an
ok
wie findet man heraus auf welchen server ein bot ist
for guild in bot.guilds:
print(guild.name)
print(guild.owner)
nah meine aeinfach so
??
weil mir angezigt wird beim starten von ezcord er ist auf 2 servern
aber weiß nicht welcher der zweite ist, kann man das im developer portal oder so sehen
Dann tu das in dein on_ready
bei owner wird none angezeigt
code?
und ich will wissen wem der kack test bot server gehört
@bot.event
async def on_ready():
for guild in bot.guilds:
print(guild.name)
print(guild.owner)
nice
Und guild names?
Wird das geprintet?
Wenn du nicht willst, dass man deinen Bot einlädt, wieso machst du es dann nicht aus?
Im dev portal
ja das liegt am code
weil vergessen
Der server heißt test bot kp wem der gehört
intents.members = True
hast du des
Braucht er jetzt nicht mehr xD
Wir haben das "problem" gefunden hahaha
ok
weiß einer woran es liegen kann wenn der bot bei einem klappt aber auf dem server nicht mehr, requirments sind drinne(bei keks hosting)
Habe diesen fehler der aber nicht wenn ich ihn starte komme(bei mir halt starten)
RuntimeError: PyNaCl library needed in order to use voice
wo geht es nun nicht?
also auf dem hosting server
Hast du in der requirements.txt rlly PyNaCl stehen?
das ist dort vor installiert
ja
du brauchst es nd in requirements
Rlly? Dachte nur ffmpeg
hm kann auch sein
bei mir musste ichs in die req.txt packen
hm achso
Hey ich habe ein Economysystem erstellt nur jetzt hab ich das Problem das ich bei allen Servern das Geld habe wenn ich auf einem /work mache.
Ich würde das gerne trennen nur habe keine Ahnung wie ich den check einbauen sollte auf welchem Server das passiert ist hier der Code:
Einfach erklärt: Auf jedem Server eigenes Economy System
@commands.Cog.listener()
async def on_ready(self):
async with aiosqlite.connect(self.DB) as db:
await db.execute(
"""
CREATE TABLE IF NOT EXISTS economy (
user_id INTEGER PRIMARY KEY,
guild_id INTEGER,
bank INTEGER DEFAULT 0,
cash INTEGER DEFAULT 0
)"""
)
async def check_user(self, user_id):
async with aiosqlite.connect(self.DB) as db:
await db.execute("INSERT OR IGNORE INTO economy (user_id) VALUES (?)", (user_id,))
await db.commit()
async def get_cash(self, user_id):
await self.check_user(user_id)
async with aiosqlite.connect(self.DB) as db:
async with db.execute("SELECT cash FROM economy WHERE user_id = ?", (user_id,)) as cursor:
result = await cursor.fetchone()
return result[0]
@slash_command(description='Arbeite ein bisschen, um Geld zu verdienen.')
@commands.cooldown(1, 3600, commands.BucketType.user)
@commands.guild_only()
async def work(self, ctx):
Chance = random.randint(1, 100)
if Chance > 25:
coins = random.randint(20, 80)
eventP = random.choice(events.workP(coins))
em = discord.Embed(
description=f'{eventP}',
color=discord.Color.green(),
timestamp=datetime.now()
)
em.set_author(name=f"{ctx.author.name}", icon_url=f'{ctx.author.display_avatar}')
async with aiosqlite.connect(self.DB) as db:
async with db.execute("UPDATE economy SET cash = cash + ? WHERE user_id = ?",
(coins, ctx.author.id)) as cursor:
await db.commit()
await ctx.respond(embed=em)
else:
coinsN = random.randint(10, 50)
eventN = random.choice(events.workN(coinsN))
em2 = discord.Embed(
description=f'{eventN}',
color=discord.Color.red(),
timestamp=datetime.now()
)
em2.set_author(name=f"{ctx.author.name}", icon_url=f'{ctx.author.display_avatar}')
async with aiosqlite.connect(self.DB) as db:
async with db.execute("UPDATE economy SET cash = cash - ? WHERE user_id = ?",
(coinsN, ctx.author.id)) as cursor:
await db.commit()
await ctx.respond(embed=em2)
Ich mach sowas in dem ich eine ID habe, die sich aus user id + server id zusammensetzt und die trag ich in die db ein
Wie zusammengesetzt?
Hättest du davon ein Beispiel damit ich es vlt verstehe?
also aktuell speicherst du ja die user ID in der datenbank. jetzt musst du zusätzlich noch die server ID speichern
wäre auch eine Option
@commands.Cog.listener()
async def on_ready(self)
async with aiosqlite.connect(self.db) as db:
await db.execute("""
CREATE TABLE IF NOT EXISTS warns(
id INT,
warns)""")
await db.commit()
@commands.Cog.listener()
async def on_member_join(self,member)
id = int(member.id)+int(member.guild.id)
async with aiosqlite.connect(self.db) as db:
await db.execute("INSERT INTO warns (id,warns) VALUES (?,0)",(id,))
await db.commit()
@slash_command()
async def warn(self, ctx, user: Option(discord.Member, required=True))
id = int(ctx.guild.id)+int(user.id)
async with aiosqlite.connect(self.db) as db:
await db.execute("UPDATE warns SET warns = warns + 1 WHERE id = (?)", (id,))
await ctx.respond(f"{user} wurde gewarnt!")
async with db.execute("SELECT warns FROM warns WHERE id = (?)", (id,)) as cursor:
az = await cursor.fetchone()
az = az[0]
if az => 5:
await ctx.guild.ban(user)
await ctx.channel.send(f"{user} wurde gebannt, da er 5 Warns hat!")
Hab ich mir mal kurz ausm Arm geschüttelt, habs jtzt nd getestet. Aber so siehts ungefähr aus
Okay egal, verstehe es trotzdem nicht, ich probiere einfach mal weiter irgendwie geht es schon
Aber trotzdem Danke
wie gette ich eine kategorie
wie einen channel
ok
category = ctx.guild.get_channel(id)
Hallo ich mache gerade ein Blacklist manager und wollte fragen kann ich einschrenken welche channel in einen channel select menü angezeigt werden sollen?
das einzige was du begrenzen kannst, ist welche channel typen angezeigt werden sollen. also zum beispiel nur forum channels oder nur kategorien.
das kannst du machen, indem du channel_types=[discord.ForumChannel] machst
hier siehst du nochmal eine genaue beschreibung: https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.channel_select
Pycord
The library has helpers to help create component-based UIs. Shortcut decorators: Objects: Attributes children, disable_on_timeout, message, timeout. Methods cls View.from_message, def add_item, def...
Kennt wer ne seite oder so wo man free hosting kriegt aber wo man net so begrenzt ist?
Code: ```py
@discord.ui.button(label="\u200b", style=discord.ButtonStyle.green, emoji="🍪", custom_id="Cookie", row=1)
async def button_callback1(self, button, interaction):
async with aiosqlite.connect(self.db) as db:
async with db.execute("SELECT level FROM cookie WHERE user_id = ?", (self.user.id,)) as cursor:
level = await cursor.fetchone()
if level == 1:
coins = 2
cookies = await self.get_cookies(self.user.id)
cookieG = cookies + coins
async with aiosqlite.connect(self.db) as db:
async with db.execute("UPDATE cookie SET cookies = cookies + ? WHERE user_id = ?",
(coins, self.user_id)) as cursor:
await db.commit()
em2 = discord.Embed(description=f"Du hast **{coins}**🍪 erhalten", color=discord.Color.green(),
timestamp=datetime.now()
)
em2.add_field(
name='Cookies:',
value=f'{cookieG}🍪'
)
if self.user.avatar:
em2.set_author(name=f"{self.user.name}", icon_url=f'{self.user.avatar}')
else:
em2.set_author(name=f"{self.user.name}")
await interaction.response.send_message(embed=em2, ephemeral=True)
elif level == 0:
coins = 1
cookies = await self.get_cookies(self.user.id)
cookieG = cookies + coins
async with aiosqlite.connect(self.db) as db:
async with db.execute("UPDATE cookie SET cookies = cookies + ? WHERE user_id = ?",
(coins, self.user_id)) as cursor:
await db.commit()
em2 = discord.Embed(description=f"Du hast **{coins}**🍪 erhalten", color=discord.Color.green(),
timestamp=datetime.now()
)
em2.add_field(
name='Cookies:',
value=f'{cookieG}🍪'
)
if self.user.avatar:
em2.set_author(name=f"{self.user.name}", icon_url=f'{self.user.avatar}')
else:
em2.set_author(name=f"{self.user.name}")
await interaction.response.send_message(embed=em2, ephemeral=True)
else:
emErr2= discord.Embed(title="❌ | Fehler", description="`❌` | Es ist ein unbekannter Fehler aufgetreten")
await interaction.response.send_message(embed=emErr2, ephemeral=True)```
Da kommt kein error aber obwohl ich level 1 bin kommt dann nur das else dass ich zur kontrole programmiert habe
mach mal print(level), das ist wahrscheinlich noch ein tupel
wie du das löst zeige ich bei meiner datenbankserie in folge 2 bei 0:28
tubel? was ist das?
Mein Discord Server
► https://discord.gg/zfvbjTEzv6
Code auf Github ► https://github.com/tibue99/tutorial-bot
Discord Developer Portal ► https://discord.com/developers/applications
Pycord
Docs ► https://docs.pycord.dev/
Guide ► https://guide.pycord.dev/introduction/
Discord Server ► https://discord.gg/pycord
Hey, heute schauen wir uns weiter...
mhm, das wird geprintet: (1,)
thx hat geklappt
kann man es eig irgendwie machen wenn ein user nicht auf den button klickt, dass er z.b. alle 60 sec 1 Keks bekommt, da ich einen cookie clicker mache
Mit ner task sicher
Mein Discord Server
► https://discord.gg/zfvbjTEzv6
UTC Zeitzone
► https://time.is/de/UTC
Code auf Github
► https://github.com/tibue99/tutorial-bot
Tutorial Playlist
► https://youtube.com/playlist?list=PLwRWzD1Sw5lXZApchxorxeBQ_P_Fjdsj1
Discord Developer Portal
► https://discord.com/developers/applications
Pycord
Docs ► https://docs.pycord....
ja aber wie finde ich heraus, dass er nicht klickt
Hätte jetzt iwie gesagt, wenn er klickt, wird in die DB nen wert auf 1 (für geklickt) gesetzt. Dann hast du 1x ne Task die alle 60sek diese variable auf 0 setzt (für nicht geklickt)
Und eine die z.b. alle 60 oder 30s checkt, ob der Wert auf 0 ist, wenn er 0 ist dann wird nen Keks geaddet
klingt nicht schlecht, muss ich dann morgen mal probieren
Denkst du, es passt, wenn ich meinen Cookie Clicker in meinen allg. Bot reinmache oder lieber nen extra bot
ich denke es passt, machst du auch einen cookie clicker?
Ja, hatte die Idee schon vor 2 Monaten 
Hab mir auch iwann im Lateinunterricht nen Plan gezeichnet 😂
xd
Und angefangen den Code zu schreiben aber hab dann erstmal andere Sachen weitergemacht
ok, ich habe bis jetzt erst den ganz normalen button und wie so einen shop für upgrades
Ok
Kann mal jmd testen und sagen ob das klappt?
Imports müssten die normalen cog Imports sein und aiosqlite noch.
weiss einer wie geht das
Mein Discord Server
► https://discord.gg/zfvbjTEzv6
Code auf Github ► https://github.com/tibue99/tutorial-bot
Discord Developer Portal ► https://discord.com/developers/applications
Pycord
Docs ► https://docs.pycord.dev/
Guide ► https://guide.pycord.dev/introduction/
Discord Server ► https://discord.gg/pycord
In diesem Video stelle ich euch S...
import discord
from discord.ext import commands
from discord.commands import slash_command
import sqlite3
conn = sqlite3.connect('tickets.db')
c = conn.cursor()
c.execute('''
CREATE TABLE IF NOT EXISTS tickets (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
channel_id INTEGER,
status TEXT DEFAULT 'open'
)
''')
conn.commit()
Mod_role = 1112015077541949545
Log_Channel = 1112015078498250788
category_id = 1112015078116573228
class Ticket(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.Cog.listener()
async def on_ready(self):
self.bot.add_view(TutorialView(self.bot))
self.bot.add_view(main(self.bot))
@slash_command()
async def createticket(ctx):
embed = discord.Embed(title="Support Ticket", description="Klicke auf den Button, um ein Ticket zu erstellen.", color=0x00ff00)
await ctx.send(embed=embed, view=TicketView())
class TicketView(discord.ui.View):
def __init__(self):
super().__init__()
self.add_item(Button(style=ButtonStyle.green, label='Ticket erstellen', custom_id='create_ticket'))
async def on_button_click(self, interaction: discord.Interaction, button: discord.ui.Button):
if button.custom_id == 'create_ticket':
category = discord.utils.get(interaction.guild.categories, name='Tickets')
if not category:
category = await interaction.guild.create_category('Tickets')
overwrites = {
interaction.guild.default_role: discord.PermissionOverwrite(read_messages=False),
interaction.user: discord.PermissionOverwrite(read_messages=True)
}
channel = await category.create_text_channel(name=f'ticket-{interaction.user.name}', overwrites=overwrites)
await channel.send(f'{interaction.user.mention} Dein Ticket wurde erstellt.')
c.execute("INSERT INTO tickets (user_id, channel_id) VALUES (?, ?)", (interaction.user.id, channel.id))
conn.commit()
@slash_command()
async def closeticket(ctx):
category = discord.utils.get(ctx.guild.categories, name='Tickets')
if category:
if isinstance(ctx.channel, discord.TextChannel) and ctx.channel.category == category:
c.execute("UPDATE tickets SET status='closed' WHERE channel_id=?", (ctx.channel.id,))
conn.commit()
await ctx.channel.send("Ticket geschlossen.")
await ctx.channel.edit(sync_permissions=True)
else:
await ctx.send("Dieser Befehl kann nur in Ticket-Kanälen verwendet werden.")
else:
await ctx.send("Es gibt keine Ticket-Kategorie.")
@slash_command()
async def opentickets(ctx):
c.execute("SELECT * FROM tickets WHERE status='open'")
tickets = c.fetchall()
if tickets:
embed = discord.Embed(title="Offene Tickets", color=0x00ff00)
for ticket in tickets:
user = bot.get_user(ticket[1])
channel = bot.get_channel(ticket[2])
embed.add_field(name=f"Ticket #{ticket[0]}", value=f"Benutzer: {user.mention}\nKanal: {channel.mention}", inline=False)
await ctx.send(embed=embed)
else:
await ctx.send("Es gibt keine offenen Tickets.")
@slash_command()()
async def ticketinfo(ctx, ticket_id: int):
c.execute("SELECT * FROM tickets WHERE id=?", (ticket_id,))
ticket = c.fetchone()
if ticket:
user = bot.get_user(ticket[1])
channel = bot.get_channel(ticket)[2]```
File "c:\Users\Rysii\OneDrive\Desktop\test bot\main.py", line 12, in <module>
bot.load_cogs("cogs") # Load all cogs in the "cogs" folder
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\ezcord\bot.py", line 152, in load_cogs
self.load_extension(f"{'.'.join(path.parts)}.{name}")
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\cog.py", line 910, in load_extension
self._load_from_module_spec(spec, name)
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\cog.py", line 777, in _load_from_module_spec
raise errors.ExtensionFailed(key, e) from e
discord.errors.ExtensionFailed: Extension 'cogs.test' raised an error: TypeError: application_command.<locals>.decorator() missing 1 required positional argument: 'func'```
Kann ich iwie den eingebauten ezcord Prefix Command bearbeitn?
ezcord selbst hat keinen prefix command eingebaut, alles was mit prefix commands zu tun hat funktioniert 1:1 so wie es bei pycord funktionieren würde
Ah, kann ich den bearbeiten?
du meinst den help command
Ja
ich kenn mich mit prefix commands nicht aus, glaube es war bot.remove_command oder so
Richtig
Wie bekomme ich die aktuelle Zeitzone des Nutzers in ein Embed?
weil...
nope. eben nicht.
embed=discord.Embed(
timezone=datetime.now()
)
Wirft das Ding da oben aus.
also einen timezone parameter gibt es bei py-cord zb gar nicht.
statt datetime.now() würde ich discord.utils.utcnow() empfehlen
falls deine lib das hat
bei meinen embeds schreibe ich zb
timestamp=discord.utils.utcnow()
andere methoden vielleicht, aber ich denke das ist die einfachste
Hätte jemand ein Beispiel wie ich hier die guild id einbauen kann (Also das das auf jedem Server extra ist das Geld)
@slash_command(description='Schenke einem bestimmten Member Coins!')
@commands.guild_only()
@commands.has_permissions(administrator=True)
async def givecoins(self, ctx, member: discord.Member, amount: int):
cash = await self.get_cash(ctx.author.id)
cash1 = await self.get_cash(member.id)
coins = amount
em1 = discord.Embed(
description=f'{member.mention} hat {amount} Coins erhalten.',
color=discord.Color.green(),
timestamp=datetime.now()
)
em1.set_author(name=f"{ctx.author.name}", icon_url=f'{ctx.author.display_avatar}')
async with aiosqlite.connect(self.DB) as db:
async with db.execute("UPDATE economy SET cash = cash + ? WHERE user_id = ?", (coins, member.id)) as cursor:
await db.commit()
await ctx.respond(embed=em1)
dafür müsstest du dein DB schema überarbeiten und eine server_id hinzufügen
UPDATE economy SET cash = cash + ? WHERE user_id = ? AND server_id = ?
@commands.Cog.listener()
async def on_ready(self):
async with aiosqlite.connect(self.DB) as db:
await db.execute(
"""
CREATE TABLE IF NOT EXISTS economy (
user_id INTEGER PRIMARY KEY,
server_id INTEGER,
bank INTEGER DEFAULT 0,
cash INTEGER DEFAULT 0
)"""
)
async def check_user(self, user_id):
async with aiosqlite.connect(self.DB) as db:
await db.execute("INSERT OR IGNORE INTO economy (user_id) VALUES (?)", (user_id,))
await db.commit()
async def get_cash(self, user_id):
await self.check_user(user_id)
async with aiosqlite.connect(self.DB) as db:
async with db.execute("SELECT cash FROM economy WHERE user_id = ?", (user_id,)) as cursor:
result = await cursor.fetchone()
return result[0]
async def get_bank(self, user_id):
await self.check_user(user_id)
async with aiosqlite.connect(self.DB) as db:
async with db.execute("SELECT bank FROM economy WHERE user_id = ?", (user_id,)) as cursor:
result = await cursor.fetchone()
return result[0]
So sieht der Code darüber aus
Ist es generell möglich einen Slash-Command nur für eine bestimmte Guild zu erstellen?
Nicht denn slash command sondern das economy auf jeden Server extra das das Geld nicht global ist
Ja
@slash_command(debug_guilds=[]) soweit ich weiß
Ah okay! Weiß nicht ob des bei discord4py auch so ist, aber das lässt sich nachschauen
Achso ich dachte wegen dem System oben was ich reingeschickt hab das du das falsch verstanden hast.
Hey kann einer mir sagen wie ich die alle Versionen alle gleichzeitig löschen kann ?
mach des alles in eine txt datei und mache dann pip uninstall text.txt
also wenn die datei text heißt wäre es so
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\cog.py", line 777, in _load_from_module_spec
raise errors.ExtensionFailed(key, e) from e
discord.errors.ExtensionFailed: Extension 'cogs.Ticket' raised an error: SyntaxError: 'await' outside function (Ticket.py, line 20)
PS C:\Users\Rysii\OneDrive\Desktop\test bot> & C:/Users/Rysii/AppData/Local/Programs/Python/Python311/python.exe "c:/Users/Rysii/OneDrive/Desktop/test bot/cogs/test.py"
File "c:\Users\Rysii\OneDrive\Desktop\test bot\cogs\test.py", line 20
await ctx.respond(embed=embed)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^```
import discord
from discord.ext import commands
from discord.commands import slash_command
class Base(commands.Cog):
def __init__(self, bot):
self.bot = bot
@slash_command(description="test")
async def avatar(ctx, member: discord.Member = None):
if member is None:
member = ctx.author
avatar_url = member.avatar_url
embed = discord.Embed(title=f"Avatar von {member.display_name}")
embed.set_image(url=avatar_url)
await ctx.respond(embed=embed)
def setup(bot):
bot.add_cog(Base(bot))```
ne. Hatte nix mit dir zu tun
in der client oder Bot variable folgendes noch hinzufügen:
help_command=None
und dann einen command erstellen mit @client.command (oder @bot.command) der help heißt
ahhh danke
Hatte davor bot.remove_command("help"). hab das jzt entfernt, aber es kommt trotzdem "Der Command existiert nicht"
hast du einen neuen command erstellt der 'help' heißt?
hm also hast du es wohl schn entfernt weil sonst würde kommen das der command bereits vergeben ist beim starten
group command?
Ja
Hatte bevor ich den Command ersetzt habe den Command mit bot.remove_command(“help“) entfernt, habe dann das help_command=None gemacht und das bot.remove_command im Code wieder entfernt… und trotzdem wird er nd angezeigt
musst nur des erste machen
Wie meinst?
Naja, ich wollte den Command der eingebaut war deaktivieren
Weil ich nd wusste wie hab ich bot.remove_command(“help“) gemacht
Dann wusste ich’s, hab das removed und halt help_command = None geschrieben
Aber der cmd geht jtzt nd mehr
🤔 zeig mal was du nun hast
Liege aktuell im Bett, also gehts nd
Frage: Wie kann ich in einem on_raw_message_delete(payload) Event auf die Guild-ID zugreifen?
payload.guild_id
Pycord
Models are classes that are received from Discord and are not meant to be created by the user of the library. Attributes key, url. Methods def is_animated, async read, def replace, async save, def ...
thx
Codet von euch wer mit Prerix commands
Sind eigentlich genauso wie slash commands nur das du @bot.command() anstadt @bot.slash_command() machst. Und wenn du ezcord benutzt musst du einfach bot =ezcord.PrefixBot() machen
Aber will das der Bot slash commands hat und prefix commands
Dann mach das?
Die slash commands kannst du ja lassen
Und halt einfach slash commands hinzufügen
Aber in der main muss dann ezcord.Bot einfach und wie mach ich dann prefix vommands
ezcord.PrefixBot()
Ja
Aber kann der dann auch noch kormal die slash commands
ezcord.Prefixbot wenn du den automatischen helpcommand ausschalten willst noch help_command=None
Ja
Ok
Hi! Hab ne frage, ich schaue mir gerade die Coding Reihe an, aber bei diesem Command kommt immer ein Fehler in der Console. Kann mir dabei jemand helfen?
Also bei "Let the bot send a message"
Komm zurück in den talk kann dir helfen
klar
Falsch eingedrückt
Weiß wer wie ich den Button und das Select menü an ein embed adden kann?
wurden beide mit discord.ui.View erstellt
Pack den button code von der klasse TempBlackklistLevelSaveButton in die BlacklistManagerSelectAdd klasse
Und dann einfach beim cmd await ctx.respond(view=BlacklistManagerSelectAdd(), embed=embed)
Ich brauch den aber einzeln da ich den noch für ein zweites select brauche
Aber ich weiß nicht, ob man 2 Views hinzufügen kann
du müsstest beide elemente zu einem view hinzufügen
okay dann mach ich den anderen button einfach doppelt danke
eine andere möglichkeit wäre zb noch eine button klasse zu nutzen, die kannst du dann immer dynamisch zu der view klasse hinzufügen wo du den button aktuell brauchst
ok ich versuch mal das danke
Folgendes Problem:
Ich wusste nicht, wie man den help_command bei Pycord ausstellt.
Deswegen hab ich bot.remove_command("help") gemacht.
Nun weiß ich, dass man ihn mit `bot = ezcord.PrefixBot(help_command=None)' ausstellt.
Hab daraufhin das bot.remove_command("help") wieder entfernt, aber mein selbstgebauter help command geht nd
wie kann ich denn in den adden?
Habs grad versucht mit view.add_item() aber dann geht das select nicht mehr
view.add_item() ist richtig
aber das select ist ja auch vom typ discord.ui.View
also zu views kannst du keine anderen views hinzufügen. entweder machst du eine button klasse und fügst diese zu der view klasse mit dem select hinzu, oder du machst eine select klasse und fügst diese zu deiner anderen view klasse hinzu
ja ich hab ne button klasse aber wie adde ich die zum Select view
so ist das halt jetzt
wie kann ich den cmd wieder aktivieren jtzt? also meinen help command
view = BlacklistManagerSelectAdd()
view.add_item(TempBlackklistLevelSaveButton())
ok danke
beachte, dass du die callback methode einer button klasse "callback" nennen musst
ich kenne mich zwar mit prefix nicht aus, aber eig solltest du das nicht aktivieren müssen. vlt liegt es an dem code von deinem help command?
@commands.command(aliases=["info"])
async def help(self, ctx):
embed = discord.Embed(title="Help", description="Here are all the commands!\nThe Prefixes for the Prefix Commands are: **!,?,@ocean quest and .**", color=0x00ff00)
embed.set_author(name=f"{ctx.author.name} in {ctx.guild.name}")
embed.set_footer(text="ToolZ | Help")
embed.set_image(url="https://cdn.discordapp.com/attachments/1112744179760627872/1114488239672270858/toolz_kopf.jpg")
await ctx.send(embed=embed, view=Help(self.time))
muss man auch nd
message content intent an?
Wird dein cog denn überhaupt geladen?
Wenn ich dem Comnd nen anderen name gebe z.b. !hel dann funktioniert er ja
@commands.command(name="help", aliases=["info"])
async def _help(self, ctx):
embed = discord.Embed(title="Help", description="Here are all the commands!\nThe Prefixes for the Prefix Commands are: **!,?,@ocean quest and .**", color=0x00ff00)
embed.set_author(name=f"{ctx.author.name} in {ctx.guild.name}")
embed.set_footer(text="ToolZ | Help")
embed.set_image(url="https://cdn.discordapp.com/attachments/1112744179760627872/1114488239672270858/toolz_kopf.jpg")
await ctx.send(embed=embed, view=Help(self.time))
Dann versuchs so
Müsste dann auch !help gehen
Dankee
Hey , wieso findet mein code Import format nicht? owbohl ich es danach heruntergeladen habe
schon mal code neugestartet
Ja alles
Er lässt auch wie ich es sehe Format nicht installieren
zeig mal code
Kann ich es dir Peer Call zeigen
grad schlecht
import discord
from discord.ext import commands
import os
import format
bot = commands.Bot(command_prefix='a!')
bot.remove_command('help')
async def get_server_count():
all=online=robot=0
for member in bot.get_all_members():
if member.bot:
robot += 1
else:
all += 1
if member.status != discord.Status.offline:
online += 1
return all,online,robot
async def update_count(count):
all, online, robot = count
nameTotal, nameOnline, nameBots = "total","online","bots"
await bot.edit_channel(channel=bot.get_channel(os.getenv('TOTAL')),
name= await format.convert_string(nameTotal + ' : ') + str(all))
await bot.edit_channel(channel=bot.get_channel(os.getenv('ONLINE')),
name=await format.convert_string(nameOnline + ' : ') + str(online))
await bot.edit_channel(channel=bot.get_channel(os.getenv('BOTS')),
name=await format.convert_string(nameBots + ' : ') + str(robot))
@bot.event
async def on_member_join(member):
await update_count(await get_server_count())
@bot.event
async def on_member_remove(member):
await update_count(await get_server_count())
@bot.event
async def on_member_update(before, after):
await update_count(await get_server_count())
@bot.event
async def on_ready():
await update_count(await get_server_count())
bot.run(os.getenv('TOKEN'))
@tawdry leaf
zeig mal code
und was sagt die console
was willst du mir damit sagen
File "c:\Users\miche\OneDrive\Desktop\Serverstats\membercount.py", line 4, in <module>
import format
ModuleNotFoundError: No module named 'format'
ja mein code ist py
Mein gott.. mach doch was da steht
import discord
from discord.ext import commands
import os
import format
bot = commands.Bot(command_prefix='a!')
bot.remove_command('help')
async def get_server_count():
all=online=robot=0
for member in bot.get_all_members():
if member.bot:
robot += 1
else:
all += 1
if member.status != discord.Status.offline:
online += 1
return all,online,robot
async def update_count(count):
all, online, robot = count
nameTotal, nameOnline, nameBots = "total","online","bots"
await bot.edit_channel(channel=bot.get_channel(os.getenv('TOTAL')),
name= await format.convert_string(nameTotal + ' : ') + str(all))
await bot.edit_channel(channel=bot.get_channel(os.getenv('ONLINE')),
name=await format.convert_string(nameOnline + ' : ') + str(online))
await bot.edit_channel(channel=bot.get_channel(os.getenv('BOTS')),
name=await format.convert_string(nameBots + ' : ') + str(robot))
@bot.event
async def on_member_join(member):
await update_count(await get_server_count())
@bot.event
async def on_member_remove(member):
await update_count(await get_server_count())
@bot.event
async def on_member_update(before, after):
await update_count(await get_server_count())
@bot.event
async def on_ready():
await update_count(await get_server_count())
bot.run(os.getenv('TOKEN'))
es gibt des nur bis 3.6 des Package
So
das meinste xD
und was sagt die console
Na das, was aufm Sticker steht
es gibt des nur bis 3.6 des Packae
ja wie gesagt, er findet format nicht. Das heißt ich muss es wieder umschreiben...
Format geht nur bis Python 3.6 deswegen geht es nicht
Hab sonst kein plan wie ich es coden soll... Dachte das geht noch bis 3.10.2
Hä, wieso kommt das jetzt?
Das hab ich garnd geschickt
Ja Discord hat gerade bugs
es gibt des nur bis 3.6 des Packae
Ich will in meiner bot activity anzeigen lassen spielt mir und dann nem random user von einem server. Das Problem ist wenn ich random.choice(guild.members) mache kommt alls member immer nur der bot member kein anderer. Deswegen wird immer Angezeit spielt mit CC x Test Bot SⱧΛⱤ𝕜҉҉#5959 und kein random mitglied. Mache ich irgendwas falsch?
Hast du member intents aktiviert??
ja du hast denke ich den owner vom bot angegeben und nicht alle member
am besten mal den Code senden
Wenn bei guild.members nur der bot rauskommt, dann hat er wohl keine member intents aktiviert
bot member meint er wohl bot owner
import discord
from discord.ext import commands
import os
import aiosqlite
from discord.embeds import Embed
class serverstats(commands.Cog):
def init(self, bot):
self.bot = bot
@commands.command(aliases=["setup-serverstats"])
@commands.has_permissions(administrator=True)
async def setup_serverstats(self, ctx: commands.Context):
db = await aiosqlite.connect("serverstats.db")
async with db.cursor() as cursor:
await cursor.execute('CREATE TABLE IF NOT EXISTS embed (guild_id INTEGER)')
await cursor.execute("SELECT * FROM embed WHERE guild_id = ?", (ctx.guild.id,))
data1 = await cursor.fetchone()
color2 = None
footer = None
try:
color2 = data1[1]
color = int(color2, 16)
footer = str(data1[2])
except:
if color2 is None:
color = 0xffffff
if footer is None:
footer = "Coded by @SSC_Network"
em = discord.Embed(
title="Serverstats Setup",
description="Please Ping the channel where you want to send the Server stats form.",
color=color
)
em.set_footer(text=footer, icon_url=ctx.guild.icon.url)
em.set_thumbnail(url=ctx.guild.icon.url)
await ctx.send(embed=em)
async def get_server_count():
all=online=robot=0
for member in bot.get_all_members():
if member.bot:
robot += 1
else:
all += 1
if member.status != discord.Status.offline:
online += 1
return all,online,robot
async def update_count(count):
all, online, robot = count
await bot.edit_channel(channel=bot.get_channel(os.getenv('TOTAL')), name= "total : " + str(all))
await bot.edit_channel(channel=bot.get_channel(os.getenv('ONLINE')), name= "online : " + str(online))
await bot.edit_channel(channel=bot.get_channel(os.getenv('BOTS')), name= "bots : " + str(robot))
@commands.Cog.listener()
async def on_member_join(member):
await update_count(await get_server_count())
@commands.Cog.listener()
async def on_member_remove(member):
await update_count(await get_server_count())
@commands.Cog.listener()
async def on_member_update(before, after):
await update_count(await get_server_count())
@commands.Cog.listener()
async def on_ready():
await update_count(await get_server_count())
def setup(bot):
bot.add_cog(serverstats(bot))
Brauche hierbei hilfe, wen ich !setup-serverstats mache, soll ich den channel pingen, hab ich gemacht , aber danach hört es auf...
@golden sky mach ein post auf!
???
guild.members gibt eine Liste mit allen membern aus, die auf der guild sind
ja ik
If you want to get your coding questions answered stop posting screenshots of your code, and learn how to post your code the right way.
#shorts
hey also ka bei pycharm geht alles aber bei meinem hoster kommt
File "/home/container/main.py", line 18, in <module>
bot.load_cogs("cogs",
AttributeError: 'Bot' object has no attribute 'load_cogs'
welche packages hast du installiert?
ezcord
zeig mal die requirements datei
aiohttp==3.8.3
aiosignal==1.2.0
aiosql==6.5
aiosqlite==0.17.0
anyio==3.6.2
async-timeout==4.0.2
asyncio==3.4.3
discord-ui==5.1.6
distlib==0.3.6
py-cord
Pillow==9.2.0
#pipenv==2023.5.19
ezcord
matplotlib
PyNaCl==1.5.0
python-dateutil==2.8.2
python-dotenv==0.21.0
requests==2.28.1
string-py==0.1.2
utils==1.0.1
mach discord-ui raus
allgemein würde ich dir empfehlen wirklich nur die packages reinzuschreiben die du brauchst
fast alles brauche ich sogar
fast 
kommt immer noch
Hey ich hätte eine Frage code gerade eine Modmail und ich möchte das wenn man ein Ticket öffnet das da steht wer es geclaimt hat. Also die Nachricht soll bearbeitet werden sobald der Command in dem Ticket ausgeführt wurde wie geht sowas?
Denke du musst denn Nachrichten id abspeichern von der nachricht die bearbeitet wird und wenn der command ausgeführt wird lädst du sie und bearbeitet dann diese Nachricht
hab schon alles probiert bekomme es nicht hin
Schick mal denn code
hab das schon wieder entfernt
kann dir ja mein on_message schicken und du könntest ja mal gucken wie das funktioniert bzw mir erklären
Warum on_message
weil das da rein soll
Was soll das machen?
Schick mal denke aber du brauchst kein on_message Event
Schick einfach mal was fu gerade hast
Bin mal kurz weg schau es mir später an
ok
Und was geht nicht
Ich möchte in dem Text stehen haben wer das Ticket geclaimt hat
Ok in dem Text der dem User gesendet wird oder der im Ticket ist
Ok welche db nutz du
Du brauchst aber dafür eine
Aso hmm
Wüsste nicht wie es ohne gehen soll
Mache das anders glaube ich mache einen Button der den Text halt bearbeitet
Is eh besser
Danke für die Hilfe
Ja aber das geht dann nur im Ticket für denn Text der bei dem User idt brauchst glaub wieder eine db
Uhm ok gucke später
schau dazu mal hier vorbei: https://discord.com/channels/1010915072694046794/1114646123014000700
Du speicherst einfach die user id und die guild id und fragst dann immer beide ab
import discord
from discord.ext import commands
class spotify(commands.Cog):
def init(self, bot):
self.bot = bot
async def get_spotify_infos(self, member: discord.Member):
activity = member.activity
if isinstance(activity, discord.Spotify):
artist = activity.artist
song = activity.title
url = activity.track_url
album = activity.album
album_cover_url = activity.album_cover_url
track_id = activity.track_id
color = activity.color
embed = discord.Embed(
title=f"{member.name}'s Spotify",
color=color,
)
embed.add_field(name="Artist", value=artist)
embed.add_field(name="Song", value=song)
embed.add_field(name="Album", value=album)
embed.add_field(name="Listen to this song", value=f"[{song}]({url})")
embed.set_thumbnail(url=album_cover_url)
embed.set_footer(text=f"Track ID: {track_id}")
return embed
else:
return None
@discord.slash_command(name="spotify")
async def _spotify(self, ctx: discord.Interaction, member: discord.Member):
spotify = await self.get_spotify_infos(member)
if spotify is None:
return await ctx.response.send_message(
f"{member.name} is not listening to Spotify."
)
await ctx.response.send_message(embed=spotify)
def setup(bot):
bot.add_cog(spotify(bot))```
warum antwortet der mir nur mit Elias's is not listening to Spotify.
Hast du presence intents aktiviert?
wo macht man das ?
Im developer portal und im code
ja wait
wo macht man das in dev portall und wo soll ich das im code hin packen
Bei den Intents
Okay, mit der Info kann ich nicht viel anfangen

was verstehst du denn nicht?
Wtf??
Sag doch einfach, was genau du nicht verstehst
Wir können nicht viel anfangen mit "das verstehe ich nd"
Locker bleiben
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'Guild' object has no attribute 'icon_url'
Python mobbt mich doch... jmd ne idee wie ichs fixen kann?
embed.set_thumbnail(url=ctx.guild.icon_url)
ahh
achte aber drauf dass die guild dafür auch ein icon haben muss
@solid ingot ich hab eine frage zu ezcord
gerne, aber dann stell doch direkt die frage statt mich zu pingen
hast du schon so was in ezcord ?
ein logging system nicht. ezcord ist eher um einfacher code zu schreiben, aber nicht für fertige bot features
kannst du vllt bei ezcord das rein machen
ezcord ist nicht für fertige bot features
Warum??
Mach es doch selber, und wenn du zu faul bist, dann lass es.
Wie timo sagte, ist ezcord da, um code einfacher zu schreiben.
Aber nicht für fertige funktionen
denn zeig wie geht das

Warum soll ich es dir zeigen?
Du hast bestimmt einen Browser mit einer Suchmaschine.
Kleiner Tipp: Man macht es mit Events
Wenn du sowas unbedingt willst, dann sei halt nicht faul und google / lies die Dokumentationen
Mein Discord Server
► https://discord.gg/zfvbjTEzv6
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Mein Hosting* ► https://tidd.ly/3gJufg6
Code auf Github ► https://github.com/tibue99/tutorial-bot
PYCORD
Docs ► https://docs.pycord.dev/
Guide ► https://guide.pycord.dev/introduction/
Discord Server ► https://discord.gg/pycord
Discord Developer Portal ► https://discord...
Pycord
This section outlines the different types of events listened by Client. There are two ways to register an event, the first way is through the use of Client.event(). The second way is through subcla...
Kann mir kurz jemand die ID von nem animierten Emoji (mit dem \emojiname) besorgen? Also jmd mit nitro, sonst gehts ja nd
Welches emoji?
müsstest dafür auf meinen server kommen kurz
Lad mich ein
Ja
</cmdname:cmdid>
und wo?
hä
import discord
from discord.ext import commands
from discord.commands import slash_command
class Verify(discord.ui.View):
def __init__(self):
super().__init__(timeout=None)
@discord.ui.button(
label="Verifizieren", style=discord.ButtonStyle.green, custom_id="view7803r783"
)
async def callback(self, button: discord.ui.Button, interaction: discord.Interaction):
role = interaction.guild.get_role(1043280333879136306)
logs = interaction.guild.get_channel(1043280357262372986)
if role in interaction.user.roles:
await interaction.response.send_message("Du bist bereits verifiziert", ephemeral=True)
return
await interaction.user.add_roles(role)
await interaction.response.send_message("Du wurdest erfolgreich verifiziert", ephemeral=True)
await logs.send(f"{interaction.user.mention} wurde erfolgreich verifiziert")
class VerifyCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.Cog.listener()
async def on_ready(self):
self.bot.add_view(Verify())
@slash_command(description="Verify Setup", default_member_permissions=8)
async def verify(self, interaction: discord.Interaction):
await interaction.channel.send(view=Verify())
await interaction.response.send_message("Erfolgreich", ephemeral=True)
def setup(bot):
bot.add_cog(VerifyCog(bot))```
Traceback (most recent call last):
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\client.py", line 378, in _run_event
await coro(*args, **kwargs)
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\bot.py", line 1164, in on_connect
await self.sync_commands()
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\bot.py", line 719, in sync_commands
registered_commands = await self.register_commands(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\bot.py", line 588, in register_commands
data = [cmd["command"].to_dict() for cmd in filtered_deleted]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\bot.py", line 588, in <listcomp>
data = [cmd["command"].to_dict() for cmd in filtered_deleted]
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\commands\core.py", line 862, in to_dict
] = self.default_member_permissions.value
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'int' object has no attribute 'value'```
Wo cmdid steht musst du die Id vom command eintragen und bei Befehl den Namen vom Befehl
so?
und bei cmd name den Name vom Command
?
Ja und dann abschicken
geht nicht
Ist die Id auch vom Befehl?
Dann auf Servereinstellungen dann Integration oder wie das heißt, auf den Bot und dort die Befehls id kopieren
kannst du kurz call?
Jo kann aber nicht reden bin auf Arbeit
hab schon alles gut
Das is die msg id 
hab schon
File "c:\Users\Rysii\OneDrive\Desktop\Panda Moderation bot\main.py", line 41, in <module>
bot.run(os.getenv("TOKEN"))
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\client.py", line 717, in run
return future.result()
^^^^^^^^^^^^^^^
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\client.py", line 696, in runner
await self.start(*args, **kwargs)
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\client.py", line 660, in start
await self.connect(reconnect=reconnect)
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\client.py", line 599, in connect
raise PrivilegedIntentsRequired(exc.shard_id) from None
discord.errors.PrivilegedIntentsRequired: Shard ID None is requesting privileged intents that have not been explicitly enabled in the developer portal. It is recommended to go to https://discord.com/developers/applications/ and explicitly enable the privileged intents within your application's page. If this is not possible, then consider disabling the privileged intents instead.```
Du musst die Privileged Gateway intents im https://discord.com/developers aktivieren
ich hab vergassen
warum ist das rot?
jerzt ist rot
schick mal bissl mehr bild
ja
warte
import discord
from discord.ext import commands
from discord.commands import slash_command
class Baseok(commands.Cog):
def __init__(self, bot):
self.bot = bot
@slash_command(description="setup")
async def setup(self,ctx, channel: discord.VoiceChannel, template: str):
guild = ctx.guild
if template == "Default":
default_template = await ctx.guild.create_template(name="Default Template", description="Default server settings.")
await channel.edit(name="Default Voice Channel")
await channel.edit(sync_permissions=True, reason="Applying Default template")
await ctx.guild.edit(template=default_template)
await ctx.send(f"Setup complete! Applied Default template to {channel.name}.")
def setup(bot):
bot.add_cog(Baseok(bot))```
Traceback (most recent call last):
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\commands\core.py", line 124, in wrapped
ret = await coro(arg)
^^^^^^^^^^^^^^^
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\commands\core.py", line 978, in _invoke
await self.callback(self.cog, ctx, **kwargs)
File "c:\Users\Rysii\OneDrive\Desktop\Panda Moderation bot\cogs\setup.py", line 17, in setup
await ctx.guild.edit(template=default_template)
^^^^^^^^^^^^^^^^
UnboundLocalError: cannot access local variable 'default_template' where it is not associated with a value```
meine als bild, discord verschiebt es immer
mal bitte vom ganzen command
als bild oder code?
bild
hä was meiste du?
du hast falsch formatiert
mach bei den beiden genau das was du auch bei dem if template == “Default“:
gemacht hast
Jo
Ein elif geht nur unter einen if also falsch eingerückt zu dem ist if besser als elif
ja hab gemacht
Dann muss er nun gehen 😂
import discord
from discord.ext import commands
from discord.commands import slash_command
class Baseok(commands.Cog):
def __init__(self, bot):
self.bot = bot
@slash_command(description="setup")
async def setup(self,ctx, channel: discord.VoiceChannel, template: str):
guild = ctx.guild
if template == "Default":
default_template = await ctx.guild.create_template(name="Default Template", description="Default server settings.")
await channel.edit(name="Default Voice Channel")
await channel.edit(sync_permissions=True, reason="Applying Default template")
await ctx.guild.edit(template=default_template)
await ctx.send(f"Setup complete! Applied Default template to {channel.name}.")
if template == "boosts":
boosts_template = await ctx.guild.create_template(name="boosts Template", description="Default server settings.")
await boosts.edit(name="boostst Voice Channel")
await boosts.edit(sync_permissions=True, reason="Applying boosts template")
await ctx.guild.edit(template=boosts_template)
await ctx.send(f"Setup complete! Applied Default template to {boosts.name}.")
def setup(bot):
bot.add_cog(Baseok(bot))```
Traceback (most recent call last):
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\commands\core.py", line 124, in wrapped
ret = await coro(arg)
^^^^^^^^^^^^^^^
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\commands\core.py", line 978, in _invoke
await self.callback(self.cog, ctx, **kwargs)
File "c:\Users\Rysii\OneDrive\Desktop\Panda Moderation bot\cogs\setup.py", line 17, in setup
await ctx.guild.edit(template=default_template)
^^^^^^^^^^^^^^^^
UnboundLocalError: cannot access local variable 'default_template' where it is not associated with a value
Was versuchst du
wenn das if-statement false wird ist default_template nicht definiert, du willst es aber trotzdem benutzen
Kannst auch einf guild.edit weil hast oben guild definiert
Bodenlos
bitte immer nur den code schicken, der für das problem relevant ist
ein modal ist kein view
modals musst du mit send_modal senden
wieso magst du das tun? wenn ein modal kommt, sieht der user die nachricht doch gar nicht
könntest du aber mit einem followup machen denke ich
defer
Why
pycord?
Zeig mal code
Code
Muss das nicht am Ende hin
Eine Zeile vor dem Senden
Oder verwechsel ich da was @tawdry leaf
response.send_modal
ne
Ah ok
@urban glen
glaube ich
Also await ctx.respond.send_modal oder
Mein Discord Server
► https://discord.gg/zfvbjTEzv6
Code auf Github ► https://github.com/tibue99/tutorial-bot
Discord Developer Portal ► https://discord.com/developers/applications
Tutorial Playlist ► https://youtube.com/playlist?list=PLwRWzD1Sw5lXZApchxorxeBQ_P_Fjdsj1
Pycord
Docs ► https://docs.pycord.dev/
Guide ► https://guide.pycord.dev/int...
embed.add_field(name="Test", value="hi", inline=True)
ich denke pycharm beschwert sich nur über den style. was wird angezeigt wenn du mit der maus drüberfährst?
jo das ist nicht schlimm, nur ein style tipp von pycharm
du kannst auf reformat the file drücken um das automatisch zu korrigieren
das ist eigentlich ganz gut, pycharm hilft dir dabei die offiziellen python style richtlinien einzuhalten
nervt manchmal, aber du schreibst dann deutlich ordentlicheren code wenn du alle pycharm sachen enhältst
und andere devs werden dich mehr mögen wenn sie deinen code lesen 
Hey hätte eine frage ich möchte das wenn ich mein modmail ticket schließe das ein post in einem forum erstellt wird und dann die ganzen nachrichten aus dem ticket da rein gesendet werden wie funktioniert sowas
also wenn du die nachrichten so da rein schicken möchtest, dass die user auch richtig angezeigt werden, wird es etwas komplizierter, weil du dann webhooks benutzen musst
in jedem fall musst du diese funktion nutzen um den channel zu erstellen, und dann kannst du ganz normal nachrichten in diesen channel senden: https://docs.pycord.dev/en/stable/api/models.html#discord.ForumChannel.create_thread
Pycord
Models are classes that are received from Discord and are not meant to be created by the user of the library. Attributes key, url. Methods def is_animated, async read, def replace, async save, def ...
also ich hab das bei ein bischen umständlich gemacht und speicher alles in einer file die danach gelöscht wird
hab da schon geguckt aber checke es trotzdem nicht
forum_channel = self.bot.get_channel(1114883152620556290)
file = discord.File(fileName)
embed2 = discord.Embed(title=user.name, description="test")
thread = await forum_channel.create_thread(name=None, content=None, embed=embed2, files=[file])
das habe ich aber ja
was genau funktioniert nicht?
Ignoring exception in view <View_Opened timeout=None children=2> for item <Buttons_Close style=<ButtonStyle.danger: 4> url=None disabled=False label='Ticket schließen' emoji=<PartialEmoji animated=False name='❌' id=None> row=None>:
Traceback (most recent call last):
File "C:\Users\Lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\discord\ui\view.py", line 414, in _scheduled_task
await item.callback(interaction)
File "c:\Users\Lenovo\Desktop\Discord Bots\VOID MODMAIL\cogs\modmail.py", line 262, in callback
thread = await forum_channel.create_thread(name=None, content=None, embed=embed2, files=[file])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\discord\channel.py", line 1305, in create_thread
data = await state.http.send_files(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Lenovo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\discord\http.py", line 371, in request
raise HTTPException(response, data)
discord.errors.HTTPException: 400 Bad Request (error code: 50008): Cannot send messages in a non-text channel
wo sendest du die nachricht im code?
ich erstelle das forum und dann wird doch das embed2 rein gesendet oder sehe ich das falsch
hm es kann sein dass du auf den pycord master branch wechseln musst
im changelog steht irgendwas von einem bug fix bei forum channels
was ist das
pip install git+https://github.com/Pycord-Development/pycord
und was ist dann anders
das ist dann einfach eine neuere version
PS C:\Users\Lenovo\Desktop\Discord Bots\VOID MODMAIL> pip install git+https://github.com/Pycord-Development/pycord
Collecting git+https://github.com/Pycord-Development/pycord
Cloning https://github.com/Pycord-Development/pycord to c:\users\lenovo\appdata\local\temp\pip-req-build-iq6flmgq
ERROR: Error [WinError 2] Das System kann die angegebene Datei nicht finden while executing command git version
ERROR: Cannot find command 'git' - do you have 'git' installed and in your PATH?
[notice] A new release of pip is available: 23.0.1 -> 23.1.2
[notice] To update, run: C:\Users\Lenovo\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\python.exe -m pip install --upgrade pip
und wie mach ich das bei meinem hoster
welchen hoster hast du denn?
endelon
müsste beim host dabei stehen
falls du deine packages in eine requirements.txt datei schreiben musst, kannst du das dort rein schreiben
git+https://github.com/Pycord-Development/pycord
Collecting git+https://github.com/Pycord-Development/pycord
Cloning https://github.com/Pycord-Development/pycord to c:\users\lenovo\appdata\local\temp\pip-req-build-qxy4xei_
ERROR: Error [WinError 2] Das System kann die angegebene Datei nicht finden while executing command git version
ERROR: Cannot find command 'git' - do you have 'git' installed and in your PATH?
[notice] A new release of pip is available: 23.0.1 -> 23.1.2
[notice] To update, run: C:\Users\Lenovo\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\python.exe -m pip install --upgrade pip
hab aber git installiert
hm, das musst du mit deinem hoster klären
ist bei mir in vsc
eine kleine Schlägerei mit dem Hoster
Ignoring exception in view <View_Opened timeout=None children=2> for item <Buttons_Close style=<ButtonStyle.danger: 4> url=None disabled=False label='Ticket schließen' emoji=<PartialEmoji animated=False name='❌' id=None> row=None>:
Traceback (most recent call last):
File "/home/container/.local/lib/python3.10/site-packages/discord/ui/view.py", line 421, in _scheduled_task
await item.callback(interaction)
File "/home/container/cogs/modmail.py", line 262, in callback
thread = await forum_channel.create_thread(name=None, content=None, embed=embed2, files=[file])
File "/home/container/.local/lib/python3.10/site-packages/discord/channel.py", line 1291, in create_thread
data = await state.http.start_forum_thread(
File "/home/container/.local/lib/python3.10/site-packages/discord/http.py", line 371, in request
raise HTTPException(response, data)
discord.errors.HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body
In name: This field is required
Ignoring exception in on_message
Traceback (most recent call last):
File "/home/container/.local/lib/python3.10/site-packages/discord/client.py", line 399, in _run_event
await coro(*args, **kwargs)
File "/home/container/cogs/modmail.py", line 153, in on_message
await message.add_reaction("📨")
File "/home/container/.local/lib/python3.10/site-packages/discord/message.py", line 1599, in add_reaction
await self._state.http.add_reaction(self.channel.id, self.id, emoji)
File "/home/container/.local/lib/python3.10/site-packages/discord/http.py", line 367, in request
raise NotFound(response, data)
discord.errors.NotFound: 404 Not Found (error code: 10003): Unknown Channel
Das ist in meinem hosting
das mit add_reaction ist egal
Wiss einer wie geht das?
wie was geht
sieht man doch xD
normales embed und ein verify system
Ja war nur kurz verwirrt ._.
Wie kann ich PIL importieren
Timo hat eine video gemacht
Mein Discord Server
► https://discord.gg/zfvbjTEzv6
Links aus diesem Video
Easy-PIL Docs ► https://easy-pil.readthedocs.io/
Space Bild ► https://github.com/tibue99/tutorial-bot/blob/main/Einzelvideos/Easy-PIL/space.png
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Mein Hosting* ► https://tidd.ly/3gJufg6
Code auf Github ► https://github.com/tibue99/tutorial-bot
PYCO...
import PIL
@ruby sparrow
Komm mal call
@ruby sparrow welchen
coding
Kann nicht
hab kein bock zu schreiben
Reden
du bist voll mute
Gleich
Kenn mich jtzt nd richtig aus aber da steht was davon, dass der eine ordner nicht gefunden wurde
das klingt so als würde jemand da was machen was er nicht sollte xD
Kann’s auch wieder löschen. aber steht halt da 
meine damit den error nicht deine msg
@fierce dove du muss schon reden onhe reden kann man nicht helfen
Ah
🗣️
Komme in 20sekunde
𝑲ö𝒏𝒊𝒈𝒔𝒌𝒊𝒏𝒅 ℒℯ𝓃𝒶#3729 kann dir bestimmt dabei helfen ist in dem Team
ich frage gleich
👍
wie kann man verify link machen?
wie meinst du
siehe seinen erstellten post
ja ich sehe es 😐
Traceback (most recent call last):
File "c:\Users\Rysii\OneDrive\Desktop\Panda Moderation bot\main.py", line 39, in <module>
bot.load_cogs("cogs")
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\ezcord\bot.py", line 152, in load_cogs
self.load_extension(f"{'.'.join(path.parts)}.{name}")
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\cog.py", line 910, in load_extension
self._load_from_module_spec(spec, name)
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\cog.py", line 777, in _load_from_module_spec
raise errors.ExtensionFailed(key, e) from e
discord.errors.ExtensionFailed: Extension 'cogs.verify' raised an error: OperationalError: unable to open database file
PS C:\Users\Rysii\OneDrive\Desktop\Panda Moderation bot> ```
unable to database file da musst du irgendwie was mit bearbeiten machen glaube ich hatte den nie
?
ich weiß nicht genau wie man den fixed xD
bitte nicht den ganzen code schicken, sondern nur den code der für das problem relevant ist
deine datenbank kann nicht geöffnet werden, zb weil du einen falschen pfad angegeben hast
Ok
entweder wird deine database file in nem falschen ordner erstellt (ergo: falscher pfad wie timo sagte) oder du öffnest sie falsch
Kann eh nicht machen weil ich muss pennen
Braucht ein Server immer noch Lvl2 damit ein Bot private Threads erstellen kann?
idk
nein discord hat das mittlerweile für alle freigegeben
Dann antworte doch nicht. Die Frage ging auch nicht direkt an dich 👌 @tawdry leaf
Aaah! Wusste das nicht mehr so genau 😄
Danke! 👍🏻
Wie geht das denn in discord.py mit dem private Threads erstellen?
wenn du type=None setzt sollte der thread private sein: https://docs.pycord.dev/en/stable/api/models.html#discord.TextChannel.create_thread
Pycord
Models are classes that are received from Discord and are not meant to be created by the user of the library. Attributes key, url. Methods def is_animated, async read, def replace, async save, def ...
Ah okay!
Ich habe nämlich in den Docs gerade sowas hier gefunden...
Was ist ein Store-Channel btw.? 
das sind die channel typen die es gibt, die brauchst du aber nicht, um einen privaten thread zu erstellen
Ah okay 👍🏻
Ja das kann ich ja mal testen ^^
früher konnte man spiele auf discord kaufen, dafür gab es store channels
code
kommt drauf an. runternehmen musst du die Datei meistens nicht, die aktualisiert sich automatisch beim neuen hochladen.
es gibt auch die die möglichkeit sich per SSH zum Server zu verbinden und die Dateien auf dem Server direkt in Pycharm oder VSC zu bearbeiten
also meistens wird die Datei dann automatisch ersetzt
schau Mal online kommt auf deinen Editor an
?
aso
Hey frage wie speichere ich ab was man in einem select menü ausgewählt hat
hast du eine View Klasse oder eine select klasse?
Mein Discord Server
► https://discord.gg/zfvbjTEzv6
Code auf Github ► https://github.com/tibue99/tutorial-bot
Discord Developer Portal ► https://discord.com/developers/applications
Pycord
Docs ► https://docs.pycord.dev/
Guide ► https://guide.pycord.dev/introduction/
Discord Server ► https://discord.gg/pycord
In diesem Video stelle ich euch S...
weiß es Grad nicht auswendig, aber hier werden beide Möglichkeiten gezeigt
discord.ui.View
da speichert er es doch nicht oder?
ich möchte das dan in meinem Text steht ... hat ... ausgewählt
ah doch warte bin dumm
sorry
select_response = await self.bot.wait_for(
"select_option",
timeout=120,
check=lambda interaction: interaction.user.id == message.author.id and interaction.message.id == select_message.id
)
await select_response.respond(type=InteractionType.ChannelMessageWithSource, content="")
selected_values = select_response.values
if selected_values:
selected_options = [option.label for option in select.options if option.value in selected_values]
selected_options_text = "\n".join(selected_options)
await interaction.response.send_message(f"Du hast folgende Auswahl getroffen:\n{selected_options_text}")
else:
await interaction.response.send_message("Du hast keine Auswahl getroffen.")
hätte das so gemacht aber joa
hey wie kann ich ein dropdown menu mit daten aus einer datenbank erzeugen wo ich dei inhalte nciht kenne aus dem select menü video wird mir das nicht ganz klar und ich bekomme es nicht ganz hin es geht nur ums erstellen des dropdowns. danke vorab
dafür musst du mit einer select klasse arbeiten und die options dann an diese selectklasse übergeben, so in etwa
@slash_command()
async def select2(self, ctx):
options = [
discord.SelectOption(label="Python", description="Python Beschreibung", emoji="👑"),
discord.SelectOption(label="Java", description="Java Beschreibung", emoji="💻"),
discord.SelectOption(label="Javascript", description="Javascript Beschreibung", emoji="🚩", value="JS")
]
select = TutorialSelect(options)
view = discord.ui.View(timeout=None)
view.add_item(select)
await ctx.respond(view=view)
class TutorialSelect(discord.ui.Select):
def __init__(self, options):
super().__init__(
min_values=1,
max_values=1,
placeholder="Triff eine Auswahl",
options=options
)
wenn das an mich ging ich habs aktuell so _
async def get_shop():
async with aiosqlite.connect("main.db") as db:
async with db.execute("SELECT ANZG_Name FROM shop")as cursor:
result = await cursor.fetchall()
nun = []
for i in result:
nun.append(i[0])
return nun
class Economy(commands.Cog):
def __init__(self, bot: discord.Bot):
self.bot = bot
self.DB = f"main.db"
self.eco = "🪙"
@commands.Cog.listener()
async def on_ready(self):
print('Modul: Economy Geladen')
@slash_command(name="remove_item", description="Enferne Items aus dem shop")
@discord.default_permissions(administrator=True)
async def shop_remove_item(self, ctx):
await ctx.respond("Was willst du entfernen?", view=RemoveView())
def setup(bot):
bot.add_cog(Economy(bot))
class RemoveDropdown(discord.ui.View):
def __init__(self, ctx):
self.ctx = ctx
shops = await get_shop()
options = [
discord.SelectOption(
label=f"{shops}", description="Entferne rollen aus dem Shop!")
]
@discord.ui.select(
max_values=1,
placeholder="Triff eine Auswahl",
options=options
)
async def select_callback1(self, select, interaction: discord.Interaction):
await interaction.respond(f"du hast dich für {select.values[0]} Entschieden!")
async with aiosqlite.connect("main.db") as db:
await db.execute(
"DELETE FROM shop WHERE ANZG_name=?", (
select.values[0].name,)
)
await db.commit()
aber logischerweise kann es nicht gehen da ich ja nicht an der stelle awaiten kann.
du hast eine view klasse, du brauchst allerdings eine select klasse
die optionen musst du dann im slash commands laden und an die select klasse übergeben
also die remove dropdown von view zu select mit daten übergabe okay
hab jetzt das ```py
class RemoveDropdown(discord.ui.Select):
def init(self, ctx, shops):
self.ctx = ctx
self.shops = shops
options = [
discord.SelectOption(
label=f"{self.shops}", description="Entferne rollen aus dem Shop!")
]
aber da steht jetzt self is not defined bei label=f"...
@normal sundial schau dir nochmal den beispielcode an den ich geschickt habe. die options lädst du im slash command, und dann übergibst du die options an den super konstruktor deiner select klasse
@slash_command(name="remove_item", description="Enferne Items aus dem shop")
@discord.default_permissions(administrator=True)
async def shop_remove_item(self, ctx):
shops = await get_shop()
await ctx.respond("Was willst du entfernen?", view=RemoveView(shops))
class RemoveView(discord.ui.View):
def __init__(self, ctx, shops):
self.ctx = ctx
self.shops = shops
options = [
discord.SelectOption(
label="Rollen", description="Enferne Rollen aus dem shop!")
]
@discord.ui.select(
max_values=1,
placeholder="Triff eine Auswahl",
options=options
)
async def select_callback(self, select, interaction: discord.Interaction):
await interaction.respond(f"du hast dich für {select.values[0]} Entschieden!")
await interaction.respond("welche Rolle willst du entfernen?", view=RemoveDropdown(self.shops))
class RemoveDropdown(discord.ui.Select):
def __init__(self, options):
super().__init__(
min_values=1,
max_values=1,
placeholder="Triff eine Auswahl",
options=options
)
async def select_callback1(self, select, interaction: discord.Interaction):
await interaction.respond(f"du hast dich für {select.values[0]} Entschieden!")
async with aiosqlite.connect("main.db") as db:
await db.execute(
"DELETE FROM shop WHERE ANZG_name=?", (
select.values[0].name,)
)
await db.commit()
habs jetzt so aber bekomme nen error Application Command raised an exception: TypeError: RemoveView.__init__() missing 1 required positional argument: 'shop s'
übergebe es doch überall
Kennt ihr einen Import in Python um einen Random String zu erzeugen?
schau mal im traceback nach in welcher zeile der error ist, dann siehst du wo du vergessen hast etwas zu übergeben. du versuchst aber zb auch RemoveDropdown als view zu nutzen. das geht aber nicht, da das ja eine select klasse und keine view klasse ist
du kannst mit import random arbeiten
So? Ich dachte das gibt nur Random Nmb zurück?
okay wie mache ich dass dann bei meinem beispiel? also das RemoveDropdown soll ja nach dem ich das ausgählt habe ein neues menü öffnen
naja das ist eine von vielen sachen, die man damit machen kann. du kannst dir aber zb auch eine liste mit buchstaben holen und dann daraus ein zufälliges element auswählen, um daraus ein zufälligen string zu generieren
import string
import random
random_word = ""
for i in range(5):
random_word += random.choice(string.ascii_letters)
string.ascii_letters ist eine liste mit buchstaben, und random.choice wählt einen zufälligen buchstaben davon aus
im grunde so wie in meinem beispiel oben
Jo Grade gemerkt beim recherchieren 😄
so?
class RemoveView(discord.ui.View):
def __init__(self, ctx, shops):
self.ctx = ctx
self.shops = shops
options = [
discord.SelectOption(
label="Rollen", description="Enferne Rollen aus dem shop!")
]
@discord.ui.select(
max_values=1,
placeholder="Triff eine Auswahl",
options=options
)
async def select_callback(self, select, interaction: discord.Interaction):
select = RemoveDropdown(self.shops)
view = discord.ui.View(timeout=None)
view.add_item(select)
await interaction.respond(f"du hast dich für {select.values[0]} Entschieden!")
await interaction.respond("welche Rolle willst du entfernen?", view=view)
jetzt hast du wieder eien view klasse, du brauchst aber eine select klasse
das ist die erste die gecalled wird
class RemoveView(discord.ui.View):
def __init__(self, ctx, shops):
self.ctx = ctx
self.shops = shops
options = [
discord.SelectOption(
label="Rollen", description="Enferne Rollen aus dem shop!")
]
@discord.ui.select(
max_values=1,
placeholder="Triff eine Auswahl",
options=options
)
async def select_callback(self, select, interaction: discord.Interaction):
select = RemoveDropdown(self.shops)
view = discord.ui.View(timeout=None)
view.add_item(select)
await interaction.respond(f"du hast dich für {select.values[0]} Entschieden!")
await interaction.respond("welche Rolle willst du entfernen?", view=view)
class RemoveDropdown(discord.ui.Select):
def __init__(self, shops):
super().__init__(
min_values=1,
max_values=1,
placeholder="Triff eine Auswahl",
options=shops
)
async def select_callback1(self, select, interaction: discord.Interaction):
await interaction.respond(f"du hast dich für {select.values[0]} Entschieden!")
async with aiosqlite.connect("main.db") as db:
await db.execute(
"DELETE FROM shop WHERE ANZG_name=?", (
select.values[0].name,)
)
await db.commit()
habs grade so:
@slash_command(name="remove_item", description="Enferne Items aus dem shop")
@discord.default_permissions(administrator=True)
async def shop_remove_item(self, ctx):
shops = await get_shop()
select = RemoveDropdown(shops)
view = discord.ui.View(timeout=None)
view.add_item(select)
await ctx.respond(view=view)
await ctx.respond("Was willst du entfernen?", view=view)
@slash_command(name='buyitem', description='Kaufe dir ein Item aus dem Shop.')
async def buyitem(self, ctx):
await ctx.respond(view=Dropdown())
class RemoveView(discord.ui.Select):
def __init__(self, ctx, shops):
self.ctx = ctx
self.shops = shops
options = [
discord.SelectOption(
label="Rollen", description="Enferne Rollen aus dem shop!")
]
super().__init__(
min_values=1,
max_values=1,
placeholder="Triff eine Auswahl",
options=options
)
async def select_callback(self, select, interaction: discord.Interaction):
select = RemoveDropdown(self.shops)
view = discord.ui.View(timeout=None)
view.add_item(select)
await interaction.respond(f"du hast dich für {select.values[0]} Entschieden!")
await interaction.respond("welche Rolle willst du entfernen?", view=view)
class RemoveDropdown(discord.ui.Select):
def __init__(self, shops):
super().__init__(
min_values=1,
max_values=1,
placeholder="Triff eine Auswahl",
options=shops
)
async def select_callback1(self, select, interaction: discord.Interaction):
await interaction.respond(f"du hast dich für {select.values[0]} Entschieden!")
async with aiosqlite.connect("main.db") as db:
await db.execute(
"DELETE FROM shop WHERE ANZG_name=?", (
select.values[0].name,)
)
await db.commit()
jetzt gibt es Application Command raised an exception: AttributeError: 'str' object has no attribute 'to_dict'
schick mal den traceback
Traceback (most recent call last):
File "C:\Users\Angel\Desktop\alles\Bot2023\lib\site-packages\discord\commands\core.py", line 124, in wrapped
ret = await coro(arg)
File "C:\Users\Angel\Desktop\alles\Bot2023\lib\site-packages\discord\commands\core.py", line 978, in _invoke
await self.callback(self.cog, ctx, **kwargs)
File "C:\Users\Angel\PycharmProjects\Bot2023\Cogs\economy.py", line 316, in shop_remove_item
await ctx.respond(view=view)
File "C:\Users\Angel\Desktop\alles\Bot2023\lib\site-packages\discord\interactions.py", line 566, in respond
return await self.response.send_message(*args, **kwargs)
File "C:\Users\Angel\Desktop\alles\Bot2023\lib\site-packages\discord\interactions.py", line 863, in send_message
payload["components"] = view.to_components()
File "C:\Users\Angel\Desktop\alles\Bot2023\lib\site-packages\discord\ui\view.py", line 222, in to_components
children = [item.to_component_dict() for item in group]
File "C:\Users\Angel\Desktop\alles\Bot2023\lib\site-packages\discord\ui\view.py", line 222, in <listcomp>
children = [item.to_component_dict() for item in group]
File "C:\Users\Angel\Desktop\alles\Bot2023\lib\site-packages\discord\ui\select.py", line 405, in to_component_dict
return self._underlying.to_dict()
File "C:\Users\Angel\Desktop\alles\Bot2023\lib\site-packages\discord\components.py", line 362, in to_dict
payload["options"] = [op.to_dict() for op in self.options]
File "C:\Users\Angel\Desktop\alles\Bot2023\lib\site-packages\discord\components.py", line 362, in <listcomp>
payload["options"] = [op.to_dict() for op in self.options]
AttributeError: 'str' object has no attribute 'to_dict'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\Angel\Desktop\alles\Bot2023\lib\site-packages\discord\bot.py", line 1133, in invoke_application_command
await ctx.command.invoke(ctx)
File "C:\Users\Angel\Desktop\alles\Bot2023\lib\site-packages\discord\commands\core.py", line 375, in invoke
await injected(ctx)
File "C:\Users\Angel\Desktop\alles\Bot2023\lib\site-packages\discord\commands\core.py", line 132, in wrapped
raise ApplicationCommandInvokeError(exc) from exc
discord.errors.ApplicationCommandInvokeError: Application Command raised an exception: AttributeError: 'str' object has no attribute 'to_dict'
keine ahnung wieso aber in pycharm werden tracebacks angezeigt und in vs-code nicht.
wichtig und richtig
Ignoring exception in modal <cogs.giveaway.Modal object at 0x110641960>:
Traceback (most recent call last):
File "/Users/konjarehm/PycharmProjects/toolsdcbo/venv/lib/python3.10/site-packages/discord/ui/modal.py", line 341, in dispatch
await value.callback(interaction)
File "/Users/konjarehm/PycharmProjects/toolsdcbo/cogs/giveaway.py", line 77, in callback
gewinner = random.randint(1, int(teilnehmer))
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/random.py", line 370, in randint
return self.randrange(a, b+1)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/random.py", line 353, in randrange
raise ValueError("empty range for randrange() (%d, %d, %d)" % (istart, istop, width))
ValueError: empty range for randrange() (1, 1, 0)
Was heißt das denn?
Code
teilnehmer = 0
teilnehmer2 = 0
async with aiosqlite.connect("giveaway.db") as db:
async with db.execute(
"""
SELECT user_id FROM giveaway
WHERE giveaway_id = ?
""", (msg.id,)) as cursor:
async for row in cursor:
teilnehmer += 1
if teilnehmer == 1 or 0:
await interaction.channel.send("Sorry, nobody or only one person joined the giveaway so it got canceled. ")
else:
gewinner = random.randint(1, teilnehmer)
das heißt, dass deine zweite zahl bei randrange kleiner als deine erste zahl ist
das ist illegal 
beachte außerdem, dass die if abfrage if teilnehmer == 1 or 0: wahrscheinlich nicht so gewollt ist, das or 0 ist immer false. besser wäre teilnehmer <= 1
und wo ist das problem eine idee?
Hmm 🥲 danke
hm schwer zu sagen, prüf mal ob die view variable vom richtigen typ ist bevor du ctx.respond machst
view ist <class 'discord.ui.view.View'>
hm komisch
aber wie ich es habe ist richtig?
Dein Fehler liegt bei der Klasse RemoveDropdown, um genau zu sein bei options=shops.
So sollte es korrekt sein. - Es kann natürlich auch sein das dein Fehler an einer anderen Stelle des Codes auftritt und du die Options korrekt übergeben hast, jedoch kann dies dein Fehler verursacht haben.
class RemoveDropdown(discord.ui.Select):
def __init__(self, shops):
options = [discord.SelectOption(label=shop, value=shop) for shop in shops]
super().__init__(
min_values=1,
max_values=1,
placeholder="Triff eine Auswahl",
options=options
)
dann ist es ja doch nicht so wie timo es sagte
Wie gesagt, es kann deinen Fehler verursacht haben. Ob das jetzt deinen Fehler tatsächlich verursacht hat wird sich zeigen, indem du den Code mal probierst.
jetzt wird was ausgeführt allerdings nicht so wie es soll
so hab ich es:
class RemoveView(discord.ui.Select):
def __init__(self, ctx, shops):
self.ctx = ctx
self.shops = shops
options = [
discord.SelectOption(
label="Rollen", description="Enferne Rollen aus dem shop!")
]
super().__init__(
placeholder="Triff eine Auswahl",
options=options
)
async def select_callback(self, select, interaction: discord.Interaction):
selects = RemoveDropdown(self.shops)
view = discord.ui.View(timeout=None)
view.add_item(selects)
await interaction.respond(f"du hast dich für {select.values[0]} Entschieden!")
await interaction.respond("welche Rolle willst du entfernen?", view=view)
class RemoveDropdown(discord.ui.Select):
def __init__(self, shops):
options = [discord.SelectOption(label=shop, value=shop) for shop in shops]
super().__init__(
placeholder="Triff eine Auswahl",
options=options
)
async def select_callback1(self, select, interaction: discord.Interaction):
await interaction.respond(f"du hast dich für {select.values[0]} Entschieden!")
async with aiosqlite.connect("main.db") as db:
await db.execute(
"DELETE FROM shop WHERE ANZG_name=?", (
select.values[0].name,)
)
await db.commit()
aber er springt direkt auf die rollen wahl
er soll aber vorher die iengabe nehmen rollen zu entfernen und dann erst welche und nicht direkt fragen welche
Kannst du genauer erklären, was du genau haben möchtest und was dein Fehler ist? Ich verstehe leider nicht was du genau möchtest.
Ich möchte ein Shop system haben wo man z.b rollen oder anderen stuff (der noch kommt) kaufen kann aktuell nur eine Rolle und da soll der Befehl erst Mal fragen was aus dem Shop entfernt werden soll und dann fragen welches "Item" so etwas verständlicher?
Und der Fehler ist dass er direkt die angabe aus der Datenbank nimmt
Welche Klasse wird den zuerst aufgerufen? Dein Code und deine Nachricht ist für mich nicht verständlich, was genau du jetzt möchtest.
Wird zuerst die Klasse RemoveDropdown oder die Klasse RemoveView aufgerufen?
Zuerst die dropdown
Wenn zuerst die Klasse RemoveDropdown aufgerufen wird, macht dieser Code keinen Sinn.
selects = RemoveDropdown(self.shops)
view = discord.ui.View(timeout=None)
view.add_item(selects)
await interaction.respond("welche Rolle willst du entfernen?", view=view)
Damit rufst du die Klasse RemoveDropdown nochmal auf.
sorry zu erst die view
Naja dann macht der Code fast gar kein Sinn.
Du wirfst in der Klasse RemoveView die Auswahl komplett weg, weshalb die Klasse RemoveView für mich nicht einleuchtet.
Du machst mit der Auswahl vom Spieler gar nichts, du verweist ihn einfach auf eine neue Klasse.
Ich verstehe deshalb dein Problem überhaupt nicht.
Eventuell kann jemand anderes dein Problem verstehen. Dein Code und dein Anliegen macht für mich leider keinen Sinn. Tut mir leid.
naja das anliegen kann ich nicht noch deutlicher erklären der code muss kein sinn ergeben da ich kein profi bin und sonst nicht fragen würde.
es soll ein shop sein wo es admin befehle gibt womit items aus dem shop entfernt werden und zuerst soll in dem befehl geklärt werden dass es sich um rollen handelt und dann soll erfragt werden welche rollen entfernt werden sollen.
Hab fehler gefunden
und zweiten tipp werde ich ausführen, danke
jetzt führt der die RemoveView nicht mehr aus.
@slash_command(name="remove_item", description="Enferne Items aus dem shop")
@discord.default_permissions(administrator=True)
async def shop_remove_item(self, ctx):
shops = await get_shop()
select = RemoveView(shops)
view = discord.ui.View(timeout=None)
view.add_item(select)
await ctx.respond("Was willst du entfernen?", view=view)
class RemoveView(discord.ui.Select):
def __init__(self, shops):
self.shops = shops
print(1)
options = [discord.SelectOption(label="Rollen", description="Enferne Rollen aus dem shop!")]
print(2)
super().__init__(
placeholder="Triff eine Auswahl",
options=options
)
print(3)
async def select_remove_callback(self, select, interaction: discord.Interaction):
print(3.5)
selects = RemoveDropdown(self.shops)
print(4)
view = discord.ui.View(timeout=None)
view.add_item(selects)
print(5)
await interaction.respond(f"du hast dich für {select.values[0]} Entschieden!")
print(6)
if "Rollen" in select.values[0]:
print(7)
await interaction.respond("welche Rolle willst du entfernen?", view=view)
class RemoveDropdown(discord.ui.Select):
def __init__(self, shops):
options = [discord.SelectOption(label=shop, value=shop) for shop in shops]
super().__init__(
placeholder="Triff eine Auswahl",
options=options
)
async def select_callback(self, select, interaction: discord.Interaction):
await interaction.respond(f"du hast dich für {select.values[0]} Entschieden!")
async with aiosqlite.connect("main.db") as db:
await db.execute(
"DELETE FROM shop WHERE ANZG_name=?", (
select.values[0].name,)
)
await db.commit()
kann bitte nochmal jemand drüber schauen?
bis zum 3ten print geht alles ich bin überfragt grade.
deine callback methode muss callback heißen, nicht select_remove_callback
den namen kannst du dir zwar bei view klassen aussuchen, aber bei select klassen nicht
und bei der zweiten geht callback1 ?
was genau meinst du mit der zweiten?
nein, bei select klassen musst du das immer callback nennen
nur bei view klassen darfst du dir den namen aussuchen
nenn am besten auch mal RemoveView um, da das ja gar keine view klasse ist, also nur um verwirrungen zu vermeiden
wenn ich es einfach nur callback nenne dann wird es gelb markiert
vielleicht weil du noch einen select parameter hast, den müsstest du auch entfernen
aber ich brauche doch das select objekt
ja, aber aus dem callback musst du es entfernen
wie greife ich dann auf das ausgewählte objekt zu?
auf das select kannst du mit self zugreifen. mit self greifst du im prinzip auf die aktuelle klasse zu, und das ist ja die select klasse
also self.values[0] ?
ja kann sein
scheint zu klappen danke
Warum funktioniert dieser Code nicht?
@commands.Cog.listener()
async def on_guild_join(self, ctx):
name = str(ctx.guild.name)
channel = self.bot.get_channel(1116029009692733470)
await channel.send(
f"Ich bin nun auf einem neuen Server: {name}\n")
Error:
Ignoring exception in on_guild_join
Traceback (most recent call last):
File "D:\Bot\testing Interpreter\Lib\site-packages\discord\client.py", line 378, in _run_event
await coro(*args, **kwargs)
File "D:\Bot\testing\cogs\user.py", line 181, in on_guild_join
name = str(ctx.guild.name)
^^^^^^^^^
AttributeError: 'Guild' object has no attribute 'guild'
on_guild_join bekommt kein ctx, sondern eine guild übergeben
async def on_guild_join(self, guild):
name = str(guild.name)
wie bekomm ich die id von der msg wo ein button angehangen ist? 
damit bekomm ich doch die is von der msg die durch nen button ausgelöst wird
bzw abgeschickt
welche nachricht möchtest du denn?
meine wie ich in den button code die id von der gvw message reinbekomm
muss ich die übergeben?
also die ID von einer message, wo der button nicht direkt dran ist? das müsstest du dann übergeben ja
ok
kann kurz jmd was testen?
also meine giveaway sys.
müsst nur auf nen button klicken 
Ich hab bei einem command @commands.is_owner() wie kann ich einen text senden wenn der user nicht der owner vom bot ist das dann kein error kommt
evtl auch mit checkfailure, bin mir aber gerade nicht sicher
Wie kann ich ne MSG von ner interaction bearbeiten? xd
zb mit interaction.response.edit_message
ahh da muss nen response hin, danke
Bruh, du meinst was anderes. Ich meine, wie ich die msg, welche als respond gesendet wurde, bearbeiten kann xd
welche genau?
Ich habe nen modal. wenn das ausgefüllt wurde, kommt ne msg mit text und nach ner zeit soll diese msg bearbeitet werden
und das was ich geschrieben habe bearbeitet ne andere message? hast du das im modal callback gemacht?
zu beidem ja
interaction.message.edit?
ah, ist die nachricht ephemeral?
nope
Jemand eine Idee, warum der mir immer sagt, dass meine Nachricht einen nicht erlauben Datentyp hat, obwohl ich PNG sende? 
Damit meine ich kein Error, sondern eine Response in Discord
Warum macht man im on_message event message: discord.Message? Normalerweise geht auch nur message soweit ich weiß. Sonst kann ich dir leider nicht Helfen
damit das highlighting besser klappt. Da das in nem Cog ist rafft der das sonst nicht.
Ok wusste ich nicht
import discord
from discord.ext import commands
from discord.commands import slash_command
class info(commands.Cog):
def __init__(self, bot):
self.bot = bot
@slash_command(description="zeig dir info über dem bot an !🐼")
async def info(self,ctx):
embed = discord.Embed(title= "Bot-Infomationen", description="hier seid einige Informationen über dem bot:", color=discord.Color.red())
embed.set_author(name=bot.user.name, icon_url=bot.user.avatar.url)
embed.add_field(name="Entwickler", value="dein Name zb deine discord name!", inline=False)
embed.add_field(name="verson", value="1.0.0",inline=False)
embed.add_field(name="Server", value=f"Der Bot befindet sich auf {len(bot.guilds)} Servern",inline=False)
embed.set_footer(text="© 2023 bot-Name. Alle Rechte vorbehalten.")
def setup(bot):
bot.add_cog(info(bot))```
Traceback (most recent call last):
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\commands\core.py", line 124, in wrapped
ret = await coro(arg)
^^^^^^^^^^^^^^^
File "C:\Users\Rysii\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\commands\core.py", line 978, in _invoke
await self.callback(self.cog, ctx, **kwargs)
File "c:\Users\Rysii\OneDrive\Desktop\Panda Moderation bot\cogs\info.py", line 14, in info
embed.set_author(name=bot.user.name, icon_url=bot.user.avatar.url)
^^^
NameError: name 'bot' is not defined```
Musst self.bot schreiben
hab ich doch?
Nein bei embed.set_author steht nur bot

